首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL循环执行此代码

MYSQL循环执行此代码
EN

Stack Overflow用户
提问于 2013-07-09 20:33:13
回答 1查看 106关注 0票数 0

我希望以下代码以多个结束日期运行。这些结束日期必须都是该月的第一天。我可以多次执行代码,同时自己更改结束日期,但这是我想要的从2001年到现在的每月数据的大量工作。所以我的猜测是我必须循环这个?

下面是我使用的代码:

代码语言:javascript
运行
复制
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)时:

代码语言:javascript
运行
复制
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,但没有相应的日期。这怎么可能呢?

EN

回答 1

Stack Overflow用户

发布于 2013-07-09 21:33:29

根据您的输出,您需要操作日期以始终返回每月的第一个月。

在下面的SQL中,我提出了一种方法,包括计算出月初(相对于每个日期)有多少天,然后减去它。

代码语言:javascript
运行
复制
    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

分解你的原始代码:

  1. 返回给定的VoerID,返回第一个日期和最大LogID

选择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

  • 从日志中获取状态在某个范围内且LogID匹配且表中的VoerID与派生表中的VoertuigID匹配的所有项(实际上不存在于代码中)。按日志状态分组并获取第一个数据、第一个LogID和计数

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

  • Return Count

  • status columns FROM 2

修改后的代码做到了:

  1. 确定每个LogID在特定日期内的最后一个VoerID

选择VoerID,max(LogID) as MaxLogID from DB.LogStatus WHERE Datum >= '2001-01-01‘and Datum < '2013-07-01’GROUP BY VoerID

  • Restricts log by max LogID by max LogID‘2001-01-01’,然后根据相关状态进行筛选,然后每月的第一个月统计每个状态的行数

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17548267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档