Mysql组按1-15和16-30 / 31天一个月

时间:2016-07-18 21:45:34

标签: mysql date

我有一张包含很多行的表格,我需要按照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不是我想要的但是和我一样接近)

编辑:将这个词改为双月刊

2 个答案:

答案 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。)

请注意,对于没有任何行的双月期,这不会返回“零计数”。这段时间的一排将“失踪”。