首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据日期列表从数据中获取统计数据

根据日期列表从数据中获取统计数据
EN

Stack Overflow用户
提问于 2018-07-30 19:18:52
回答 2查看 85关注 0票数 0

我有一大串票。这些票有创建日期和完整日期。我正试图得到一张历史上的票单,列明一天有多少张票是开的。即,对于连续日期列表中的任意日期,在该日之前(或当日)打开多少张票,在该日期之后关闭多少张票(或有空结束日期)。

dbo.wh_task中的相关列如下所示:

代码语言:javascript
复制
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
...                 ...                         ...

我已经走了这么远:

代码语言:javascript
复制
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'.,我不确定从哪里开始,因为错误并不是描述性的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-30 19:27:01

看来,在查询中不正确地使用@dates表的别名,以及对聚合函数Count缺少Count子句。您可以尝试这个查询。还请确保为WHILE循环提供了WHILE

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-07-30 20:47:42

以防有人在googling上看到工作代码。谢谢维尼特!

代码语言:javascript
复制
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 DESC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51600879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档