我有一大串票。这些票有创建日期和完整日期。我正试图得到一张历史上的票单,列明一天有多少张票是开的。即,对于连续日期列表中的任意日期,在该日之前(或当日)打开多少张票,在该日期之后关闭多少张票(或有空结束日期)。
dbo.wh_task中的相关列如下所示:
task_number create_time date_completed
T20180619.0041 2018-06-19 19:37:24.727 2018-06-26 23:36:21.613
T20180619.0048 2018-06-19 20:41:07.800 2018-06-27 19:26:43.480
... ... ...我已经走了这么远:
DECLARE @Dates table (
day DATE,
PRIMARY KEY (day)
)
DECLARE @dIncr DATE = '2016-01-01'
DECLARE @dEnd DATE = CAST(GetDate() as DATE)
WHILE ( @dIncr < @dEnd )
BEGIN
INSERT INTO @Dates (day) VALUES( @dIncr )
SELECT @dIncr = DATEADD(DAY, 1, @dIncr )
-- --------------------------------
SELECT
@Dates.day,
COUNT(tickets.task_number) AS CountOfOpenTickets
FROM @Dates
LEFT JOIN dbo.wh_task tickets ON Dates.day BETWEEN tickets.create_time AND tickets.date_completed当我运行代码时,我得到了SQL Error (102): Incorrect syntax near 'date_completed'.,我不确定从哪里开始,因为错误并不是描述性的。
发布于 2018-07-30 19:27:01
看来,在查询中不正确地使用@dates表的别名,以及对聚合函数Count缺少Count子句。您可以尝试这个查询。还请确保为WHILE循环提供了WHILE。
SELECT
d.day,
COUNT(tickets.task_number) AS CountOfOpenTickets
FROM @Dates as d
LEFT JOIN dbo.wh_task tickets ON d.day BETWEEN tickets.create_time AND tickets.date_completed
group by d.day发布于 2018-07-30 20:47:42
以防有人在googling上看到工作代码。谢谢维尼特!
DECLARE @Dates table (
day DATE,
PRIMARY KEY (day)
)
DECLARE @dIncr DATE = '2016-01-01'
DECLARE @dEnd DATE = CAST(GetDate() as DATE)
WHILE ( @dIncr <= @dEnd)
BEGIN
INSERT INTO @Dates (day) VALUES( @dIncr )
SELECT @dIncr = DATEADD(DAY, 1, @dIncr )
END
-- --------------------------------
SELECT
dates.day,
COUNT(tickets.task_number) AS CountOfOpenTickets
FROM @Dates as dates
LEFT JOIN dbo.wh_task tickets ON (dates.day >= tickets.create_time) AND ((dates.day < tickets.date_completed) OR (tickets.date_completed IS NULL))
GROUP BY dates.day
ORDER BY dates.day DESChttps://stackoverflow.com/questions/51600879
复制相似问题