2

次のようなテーブルがあります。

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);

ただし、これにより、特定の年に開始されたものだけが得られました。

4

1 に答える 1