我希望以下代码以多个结束日期运行。这些结束日期必须都是该月的第一天。我可以多次执行代码,同时自己更改结束日期,但这是我想要的从2001年到现在的每月数据的大量工作。所以我的猜测是我必须循环这个?
下面是我使用的代码:
Select t4.Count, t4.Status
From(
SELECT count(l.VoerID) as Count, l.Datum, l.Status, l.LogID
FROM (
SELECT k.VoerID, k.Datum, MAX(k.LogID) AS LogID
FROM DB.LogStatus k
Where Datum > '2001-01-01'
and Datum < '2013-07-01'
GROUP BY k.VoerID
) m
JOIN DB.LogStatus l
ON l.VoerID = m.VoertuigID AND l.LogID = m.LogID
Where status in ('x',y,'z')
Group by Status
)t4
谁能帮上忙?
编辑:@STEPH
当我使用这个简单的代码(1)时:
SELECT VoertID,max(LogID) as MaxLogID,Datum
from DB.LogStatus
WHERE Datum >= '2001-01-01'
and Datum < '2013-07-01'
and VoerID = '50789'
GROUP BY VoerID
我得到了带有最后一个LogID的VoerID 50789,但没有相应的日期。这怎么可能呢?
发布于 2013-07-09 21:33:29
根据您的输出,您需要操作日期以始终返回每月的第一个月。
在下面的SQL中,我提出了一种方法,包括计算出月初(相对于每个日期)有多少天,然后减去它。
SELECT date_sub(Datum,interval day(Datum)-1 day) datum, status, count(l.VoerID) as count
FROM DB.LogStatus l
INNER JOIN (SELECT VoerID,max(LogID) as MaxLogID
from DB.LogStatus
WHERE Datum >= '2001-01-01'
and Datum < '2013-07-01'
GROUP BY VoerID) maxl on l.VoerID=Maxl.VoerID and l.LogID=Maxl.MaxLogID
Where status in ('x','y','z')
and Datum >= '2001-01-01'
and Datum < '2013-07-01'
GROUP BY date_sub(Datum,interval day(Datum)-1 day),status
分解你的原始代码:
选择k.VoerID,k.Datum,MAX(k.LogID) AS LogID from DB.LogStatus k Where Datum > '2001-01-01‘and Datum < '2013-07-01’GROUP BY k.VoerID
SELECT count( l.VoerID ) as Count,l.Datum,l.Status,l.LogID from ( step1 )m JOIN DB.LogStatus l ON l.VoerID= m.VoertuigID AND l.LogID = m.LogID Where Status in ('x',y,'z') Group by Status
修改后的代码做到了:
选择VoerID,max(LogID) as MaxLogID from DB.LogStatus WHERE Datum >= '2001-01-01‘and Datum < '2013-07-01’GROUP BY VoerID
SELECT date_sub( Datum,间隔天( Datum )-1天) datum,status,count(l.VoerID) as count FROM DB.LogStatus l INNER JOIN (M) maxl on l.VoerID=Maxl.VoerID和l.LogID=Maxl.MaxLogID Where status in ('x','y','z') and Datum >= '2001-01-01‘and Datum< '2013-07-01’GROUP BY date_sub(Datum,interval day(Datum)-1 day),status
https://stackoverflow.com/questions/17548267
复制相似问题