需要在具有开始和结束日期的选定日期之间按天计算活跃客户列表(也为空)
Posted
技术标签:
【中文标题】需要在具有开始和结束日期的选定日期之间按天计算活跃客户列表(也为空)【英文标题】:need active customer list by day wise between selected dates which have start and end date(null also) 【发布时间】:2018-10-08 07:38:20 【问题描述】:我们需要第 1 天和第 2 天之间没有活跃客户的结果
客户将在某个时间结束日期为空的开始和结束日期我希望在两个日期之间的活跃客户每天的结果
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
【问题讨论】:
【参考方案1】:一个选项使用日历表来表示您想要查看的所有日期。出于您的示例数据的目的,我们可以在 CTE 中硬编码日期。对于实际数据,您可能希望生成一个日期范围。这意味着下面别名为 d
的子查询将被替换为包含您要在查询中包含其范围的日期的实际表/视图。
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
,那么这意味着范围的右侧是完全开放的,即所有日期都会匹配,前提是它们的开始日期也在范围内。
【讨论】:
您应该将 CTE 替换为派生表,以便代码适用于所有旧版本的 mysql。 @GordonLinoff 当我回答时,我可以发誓标签是 SQL Server。不过,我会更新的。 如果它显示递归 cte 会很好,因此它适用于任意大的日期范围以上是关于需要在具有开始和结束日期的选定日期之间按天计算活跃客户列表(也为空)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pandas.date_range() 在指定的开始日期和结束日期之间获取具有 n 个指定周期(相等)的时间序列