首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择上个月的记录,如果在特定时间窗口内没有记录,则显示0

选择上个月的记录,如果在特定时间窗口内没有记录,则显示0
EN

Stack Overflow用户
提问于 2013-11-04 20:43:54
回答 1查看 101关注 0票数 1

您好,我使用此查询来获取在一年前的时间窗口中特定月份发生的驱动器的列表。

代码语言:javascript
复制
SELECT COUNT( drives.id ) AS drives, DATE_FORMAT( drives.timestamp,  '%d-%m-%Y' ) AS mdate
FROM drives, users
WHERE drives.user = '146'
AND DATE_FORMAT( drives.timestamp,  '%b' ) =  'Feb'
AND drives.timestamp > DATE_SUB(now(), INTERVAL 12 MONTH) 
GROUP BY DATE(drives.timestamp) ORDER BY drives.timestamp ASC

我得到了以下结果:

代码语言:javascript
复制
drives  mdate
1       14-02-2013
2       17-02-2013

然而,我希望每个月的日期的结果,即使没有找到该日期的记录,并显示0旁边的日期,没有驱动器采取place.The棘手的部分是如何获得确切的日期在1年前的时间窗口的具体月份。我可以用php实现这一点,但我更喜欢更干净的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2013-11-04 21:33:45

不确定users表在哪里(您正在交叉连接它,但实际上并没有在任何地方使用它),但是像这样的东西应该可以做您需要的事情(未测试)。

代码语言:javascript
复制
SELECT Sub1.aDay, COUNT( drives.id ) AS drives
FROM
(
    SELECT DATE_ADD('2013-02-01', INTERVAL units.i + tens.i * 10 DAY) AS aDay
    FROM
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
    CROSS JOIN
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
    HAVING MONTH(aDay) = 2
) Sub1
LEFT OUTER JOIN drives
ON Sub1.aDay = DATE(drives.timestamp)
WHERE drives.user = '146'
GROUP BY DATE(drives.timestamp) 
ORDER BY drives.timestamp ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19767956

复制
相关文章

相似问题

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