我有一张这样的桌子:
ID_____StartDate_____EndDate
----------------------------
1______05/01/2012___02/03/2013
2______06/30/2013___07/12/2013
3______02/17/2010___02/17/2013
4______12/10/2012___11/16/2013
我正在尝试计算每年活跃的 ID。如果 ID 已激活多年,则会被计算多次。我不想将年份“硬编码”到我的查询中,因为数据是多年的。(即不能使用CASE YEAR(StartDate) WHEN x then y
或IF...
上表的期望结果:
YEAR_____COUNT
2010_____1
2011_____1
2012_____3
2013_____4
我试过了:
SELECT COUNT(ID)
FROM table
WHERE (DATE_FORMAT(StartDate, '%Y-%m') BETWEEN '2013-01' AND '2013-12'
OR DATE_FORMAT(EndDate, '%Y-%m') BETWEEN '2013-01' AND '2013-12')
当然,这只适用于 2013 年。我也尝试过:
SELECT YEAR(StartDate) AS 'Start Year', YEAR(EndDate) AS 'End Year', COUNT(id)
FROM table
WHERE StartDate IS NOT NULL
GROUP BY YEAR(StartDate);
尽管这给了我在给定年份开始的那些。