日期之间的条目数

Number of entries between dates

我有一个 table 结构如下:-

day,        id
2016-03-13, 123
2016-03-13, 123
2016-03-13, 231
2016-03-14, 231
2016-03-14, 231
2016-03-15, 129

我想构建一个 table 看起来像:-

id,   d1, d7, d14
123,  1,  1,  1
231,  1,  2,  2
129,  1,  1,  1

基本上对于给定的id,列出在window时间内有条目的天数。因此,如果 id 123 在过去 14 天内有 10 个条目 - d14 将为 10.

到目前为止我有:-

    SELECT
        day,
        id
    FROM
        events
    WHERE
        datediff (DAY, day, getdate()) <= 7
    GROUP BY
        day,
        id

此查询将执行:

SELECT
    id,
    COUNT(DISTINCT CASE WHEN current_date - day <=  1 THEN 1 END) d1,
    COUNT(DISTINCT CASE WHEN current_date - day <=  7 THEN 1 END) d7,
    COUNT(DISTINCT CASE WHEN current_date - day <= 14 THEN 1 END) d14
FROM
    events
GROUP BY
    id
ORDER BY
    id

或者,自 PostgreSQL 9.4 起,稍微更简洁:

SELECT
    id,
    COUNT(DISTINCT day) FILTER (WHERE current_date - day <=  1) d1,
    COUNT(DISTINCT day) FILTER (WHERE current_date - day <=  7) d7,
    COUNT(DISTINCT day) FILTER (WHERE current_date - day <= 14) d14
FROM
    events
GROUP BY
    id
ORDER BY
    id

试试这个:

SELECT id
, count(case when DAY = getdate() then 1 else null end) as d1
, count(case when DAY + 7 >= getdate() then 1 else null end) as d7
, count(case when DAY + 14 >= getdate() then 1 else null end) as d14
FROM events
WHERE DAY between DAY >= getdate() - 14 
--or if you can have day > today ...  and DAY between getdate() - 14 and getdate()
GROUP By id