简体   繁体   English

在单个查询中按多个日期范围聚合列

[英]Aggregating a column by multiple date ranges in a single query

I have a MySQL table with 5 columns: 我有一个包含5列的MySQL表:

Device | Name | Date | Source | Income

Neither Device nor Name nor Source are unique. 设备名称来源都不是唯一的。

I am trying to write the SQL for getting the following: 我正在尝试编写SQL以获取以下内容:

Device | Name | Source | Income (for last 3 days) | Income (for last 9 days) | Income (for last 12 days)

What is the best way to do this? 做这个的最好方式是什么?

You can get a conditional SUM() via CASE statements: 您可以通过CASE语句获取条件SUM()

SELECT Device
      ,Name
      ,Source
      ,SUM(CASE WHEN date BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 3 day) AND UNIX_TIMESTAMP(NOW()) THEN Income END) AS Last_3_Days
      ,SUM(CASE WHEN date BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 9 day) AND UNIX_TIMESTAMP(NOW()) THEN Income END) AS Last_9_Days
FROM YourTable
GROUP BY Device
        ,Name
        ,Source   
SELECT COUNT(*) as total_l3d FROM table WHERE DATEDIFF(Date, NOW()) <= 3
UNION
SELECT COUNT(*) as total_l9d FROM table WHERE DATEDIFF(Date, NOW()) <= 9
UNION
SELECT COUNT(*) as total_l12d FROM table WHERE DATEDIFF(Date, NOW()) <= 12

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM