我有一张包含很多行的表格,我需要按照ID和日期双月分组计算
例如
**ID Date**
15 2016/01/01
15 2016/01/04
15 2016/01/05
15 2016/01/22
15 2016/01/30
15 2016/02/01
15 2016/02/16
15 2016/03/01
15 2016/03/16
15 2016/03/22
预期结果:
**Count ID Date**
3 15 2016/01/01
2 15 2016/01/15
1 15 2016/02/01
1 15 2016/02/15
1 15 2016/03/01
2 15 2016/03/15
目前我有这个:
SELECT count(*) as '#', ID, from_unixtime(Date, '%Y-%m-%d') as 'Date'
FROM table
GROUP BY country,WEEK(FROM_UNIXTIME(Date))
ORDER BY Date
确实按周分组但是从第一个输入开始依此类推(whici不是我想要的但是和我一样接近)
编辑:将这个词改为双月刊
答案 0 :(得分:1)
GROUP BY
子句可以是任意表达式,例如
GROUP BY (DAY(FROM_UNIXTIME(Date)) <= 15)
将事情分成1-15和16-&gt;
答案 1 :(得分:0)
第1至第15和第16至第30/31组不是“每两周一次”。这种分组将被称为双月刊。 (如果这是一个词,我更喜欢“dimonthly”一词。)
奇怪的是,对于不包含第15个的组,你想要返回第15个值,而不是返回第16个。
您可以使用表达式来获取年份和月份,然后是第1或第15个。
GROUP BY CONCAT(DATE_FORMAT(t.date,'%Y-%m-'),IF(DAY(t.date)<16,'01','15'))
+ INTERVAL 0 DAY
您可以在SELECT列表中使用相同的表达式来返回日期值。
(我个人的偏好是返回yyyy-mm-16
的日期值,而不是-15
。)
请注意,对于没有任何行的双月期,这不会返回“零计数”。这段时间的一排将“失踪”。