Hur menar du inte lösbart med group? Group by ska ju fungera;
select
*,
max([Date])
from
csv
where
Place='A12'
group by
Item
order by
Place, Product, Item
Databaser & SQLur Databashanterare & SQL
3 svar · 473 visningar · startad av Johnsen
Jag ställer en SQL-fråga till en csv-fil där samma föremål kan återfinnas vid olika datum och/eller tider.
Jag vill bara visa den, i datum/tid, senaste förekomsten.
csv-filen:
Place;Product;Item;Date;Time;Reason
"A12";"box";45532;"2010-05-19";1948;"none"
"A12";"box";45532;"2010-05-18";2015;"late"
"B01";"box";62123;"2010-05-19";1950;"noenone"
"A12";"box";72345;"2010-05-19";2031;"space"
Nyckeln för dubbletter är Place-Product-Item
Om jag ställer frågan:
SELECT * FROM csv WHERE Place='A12' ORDER BY Place, Product, Item
Får jag detta:
"A12";"box";45532;"2010-05-18";2015;"late"
"A12";"box";45532;"2010-05-19";1948;"none"
"A12";"box";72345;"2010-05-19";2031;"space"
Önskat resultat:
"A12";"box";45532;"2010-05-19";1948;"none"
"A12";"box";72345;"2010-05-19";2031;"space"
Några förslag?
Hur menar du inte lösbart med group? Group by ska ju fungera;
select
*,
max([Date])
from
csv
where
Place='A12'
group by
Item
order by
Place, Product, Item
SPIN, din fråga fungerar inte eftersom du försöker selektera element som du inte har med i din gruppering. Vidare så är det kanske inte tillräckligt att bara köra max på datum, eftersom det kanske kan förekomma flera på samma datum men vid olika klockslag?
Mitt förslag:
SELECT
Place, Product, Item, [DateTime] = SUBSTRING(MAX([Date] + ':' + [Time]), 1, 10),
[Time] =
(
SELECT TOP 1
C.[Time]
FROM
csv C
WHERE
C.Item = Item
ORDER BY
C.[Date] DESC, C.[Time] DESC
),
Reason =
(
SELECT TOP 1
C.Reason
FROM
csv C
WHERE
C.Item = Item
ORDER BY
C.[Date] DESC, C.[Time] DESC
)
FROM
csv
GROUP BY
Place, Product, Item
HAVING
Place='A12'
ORDER BY Place, Product, Item
Tack för den lösningen