我们需要第一天和第二天之间没有活跃客户的结果
客户的开始日期和结束日期有时结束日期为空,我希望两个日期之间的活跃客户逐日结果
cust strdate end
1 2018-01-01 null
2 2018-01-01 2018-01-03
3 2018-01-02 2018-01-02
4 2018-01-04 null
我的外部通过日期 2018-01-01 至 2018-01-04 的结果
day count
2018-01-01 2
2018-01-02 3
2018-01-03 2
2018-01-04 2
最佳答案
一个选项使用日历表来表示您想要查看的所有日期。出于示例数据的目的,我们可以将日期硬编码到 CTE 中。对于实际数据,您可能希望生成一个日期范围。这意味着下面别名为 d
的子查询将被替换为包含要包含在查询中的日期范围的实际表/ View 。
SELECT
d.date,
COUNT(*) AS count
FROM
(
SELECT '2018-01-01' AS date UNION ALL
SELECT '2018-01-02' UNION ALL
SELECT '2018-01-03' UNION ALL
SELECT '2018-01-04'
) d
LEFT JOIN yourTable t
ON d.date >= t.strdate AND (d.date <= t.enddate OR t.enddate IS NULL)
GROUP BY
d.date
ORDER BY
d.date;
Demo
此答案假设如果结束日期为NULL
,则意味着范围的右侧完全开放,即所有日期都将匹配,前提是它们的开始日期也在范围内。
关于mysql - 需要在具有开始日期和结束日期的选定日期之间按天列出活跃客户列表(也为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52697498/