Har två tabeller ungefär så här Något sådant här kanske skulle funka.. Robert: på vilket sätt skiljer ditt förslag sej från det jag redan testat..(förutom borttappad sortering)? den ger fel resultat helt enkelt.. Nog ett problem med SQLite. Det är en väldigt trevlig motor, men eftersom de har bestämt sig för att SQL-standarden är fel så blir mycket strängar. Det ska finnas något avsnitt i sqlite.org om just datum. Ska kolla om jag hittar. ... och eftersom jag inte kollade på den tråden du länkade till inser jag nu att mina två förra poster var något onödiga. =) Spara datum som integers för datum eller float för datum och tid istället?join med villkor
Songs
---------------
SongId int PK
Name string
Played
---------------
PlayedId int PK (antagligen rätt onödig)
PlayedDate Datetime
PlayedSongId FK refererar Songs.SongId
Resultatet jag eftersträvar
Songs.Name, Count(PlayedDate)
MEN, jag vill enbart räkna rader där PlayedDate uppfyller ett visst villkor..
Några varianter jag testat
SELECT Name AS SongName, COUNT(PlayedDate) AS [Count] FROM Songs INNER JOIN Played ON SongId = PlayedSongId WHERE PlayedDate > 2006-09-01 GROUP BY SongId ORDER BY [Count] DESC, Name ASC LIMIT 10
SELECT Name AS SongName, COUNT(PlayedDate) AS [Count] FROM Songs INNER JOIN Played ON SongId = PlayedSongId GROUP BY SongId HAVING PlayedDate > 2006-09-01 ORDER BY [Count] DESC, Name ASC LIMIT 10
SELECT Name AS SongName, COUNT(PlayedDate) AS [Count] FROM Songs INNER JOIN (SELECT PlayedDate, PlayedSongId FROM Played WHERE PlayedDate > 2006-09-01) ON SongId = PlayedSongId GROUP BY SongId ORDER BY [Count] DESC, Name ASC LIMIT 10
Vad är det jag missar ?
PS. använder SQLite, men misstänker att detta inte är relevant.
Sv: join med villkor
SELECT Songs.[Name] AS SongName, Count(Played.PlayedDate) AS [Count]
FROM Played INNER JOIN Songs ON Played.PlayedSongID = Songs.SongID
WHERE Played.PlayedDate>#2006-09-01#
GROUP BY Songs.[Name];
Sv: join med villkor
SELECT Songs.Name AS SongName, [Count]
FROM Songs LEFT JOIN
(SELECT Played.PlayedSongId, COUNT(*) AS [Count]
FROM Played
WHERE Played.PlayedDate > '2006-09-01'
GROUP BY Played.PlayedSongId) ON Songs.SongId = PlayedSongId
ORDER BY [Count] DESC, Name ASC LIMIT 10
Sv:join med villkor
Andreas: eftersom även den ger fel resultat börjar jag misstänka att det är sqlite relaterat eller eventuellt provider relaterat.. Frågar i det forumet..
http://sqlite.phxsoftware.com/forums/thread/2646.aspx
Båda: och ja, jag använder mej av parameterized queries så hur jag skriver in datumet att jämföra med (borde ju inte ha) har nån betydelse..Sv:join med villkor
Men ser ut att bero på att eftersom Sqlite inte nativt stöder exempelvis datetimes så sparas dom som strängar.. sen när jag tittar i databasen så ser jag strängar i formatet d.M.yyyy hh:mm:ss vilket ju funkar "något suboptimalt" ifall dom jämförst som strängar...
Sen vems buggen är, det är ännu oklart..Sv: join med villkor
Sv: join med villkor
Sv: join med villkor
Du brukar ofta representera datum som antalet dagar från ett visst datum.
Då kan du ställa effektiva frågor. Datumformat skall då heller inte strula.