工作日的SQL查询

时间:2010-08-11 06:34:24

标签: sql reporting

我想知道创建将在过去7天内分组的报告的最佳方式是什么 - 但不是每天都有数据。例如:

08/01/10 | 0 08/02/10 |五 08/03/10 | 6 08/04/10 | 10 08/05/10 | 0 08/06/10 | 11 08/07/10 | 1

唯一的选择是创建一个包含那些日子的虚拟表并完全加入它们吗?

谢谢

4 个答案:

答案 0 :(得分:3)

尝试这样的事情

WITH LastDays (calc_date)
AS
(SELECT DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 6, 0)
UNION ALL
SELECT DATEADD(DAY, 1, calc_date)
FROM LastDays
WHERE DATEADD(DAY, 1, calc_date) < CURRENT_TIMESTAMP)
SELECT ...
FROM LastDays l LEFT JOIN (YourQuery) t ON (l.cal_date = t.YourDateColumn);

答案 1 :(得分:3)

许多人会建议动态创建一系列日期的方法,然后您可以加入这些日期。这肯定会有效,但根据我的经验,日历表是要走的路。这将以维护日历表为代价使SQL变得微不足道和通用。

在未来的某个时刻,有人会前来询问另一份不包括周末的报告。然后,您必须在周末制作动态天代帐户。然后有人会要求工作日(不包括公共假日),除此之外你别无选择,只能创建一个日历表。

我建议你咬紧牙关并创建一个日历表来加入。在每个日期预先填充它,如果您想提前考虑,那么在“工作日”中添加列,如果您的公司使用非标准周数进行报告,则可以添加周数

答案 2 :(得分:0)

您没有提及特定语言(请参阅更详细的答案),但大多数版本的sql都有当前日期的函数(例如,GetDate())。您可以使用该日期,减去x(7)天并构建您的WHERE语句。

然后你可以在该日期的那一天进行GROUP BY。

答案 3 :(得分:0)

选择最后7个交易,然后将其与您的查询一起加入,然后按日期列进行分组。希望这有帮助。