webForumDet fria alternativet

Nästan dubbletter, inte lösbart med Group?

Databaser & SQLur Databashanterare & SQL

3 svar · 473 visningar · startad av Johnsen

Medlem sedan juli 2000836 inlägg
Frågan#1

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?

Medlem sedan mars 20007 896 inlägg
#2

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
Medlem sedan jan. 20023 327 inlägg
#3

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
Medlem sedan juli 2000836 inlägg
#4

Tack för den lösningen

129 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)