【发布时间】:2019-05-22 09:57:32
【问题描述】:
很难解释的问题,所以请多多包涵。
我有两张桌子:
1) 按日期细分以及当天是否在 Basic (Y/N)
ID Date Basic_Days
5423 2019-02-03 1
5423 2019-02-04 0
5423 2019-02-05 1
5423 2019-02-06 1
5423 2019-02-07 1
5423 2019-02-08 1
5423 2019-02-09 0
5423 2019-02-10 0
5423 2019-02-11 0
5423 2019-02-12 0
5423 2019-02-13 0
5423 2019-02-14 1
5423 2019-02-15 1
5423 2019-02-16 1
2) 按订单划分的不同日期时间段
EPI_Start_Date EPI_End_Date ID EPI_ORDER
2019-02-03 2019-02-04 5423 1
2019-02-04 2019-02-15 5423 2
2019-02-15 2019-02-16 5423 3
我正在尝试做的是将各个天归因于它们各自的 EPI_ORDER,但不重复计算天数。
理想的输出是:
Basic_Days EPI_Start_Date EPI_End_Date ID EPIORDER
1 2019-02-03 2019-02-04 5423 1
5 2019-02-04 2019-02-15 5423 2
2 2019-02-15 2019-02-16 5423 3
到目前为止我所做的尝试:
我已经开始的查询几乎让我到达那里。但我想要一种正确处理最后日期的方法。
SELECT
SUM(CAST(p.Basic_Days AS int)) AS Basic_Days
, x.EPI_Start_Date
, x.EPI_End_Date
, p.ID
, x.EPIORDER
FROM *SNIP* AS x
INNER JOIN *SNIP* table leapfrog join here, unnecessary for display purposes AS cc
INNER JOIN *SNIP* AS p
ON p.ID = cc.ID
AND ( (p.[Date] BETWEEN x.EPI_Start_Date AND x.EPI_End_Date)
AND (p.[Date] <> x.EPI_End_Date) ) --this was my effort into not counting the last day on each, but it doesn't work for the very final day, where I DO want it.
WHERE p.ID = '5423' --testing
GROUP BY EPI_Start_Date
, EPI_End_Date
, x.EPIORDER
, ID
我的实际输出给了我:
Basic_Days EPI_Start_Date EPI_End_Date ID EPIORDER
1 2019-02-03 2019-02-04 5423 1
5 2019-02-04 2019-02-15 5423 2
1 2019-02-15 2019-02-16 5423 3
您可以看到最后一行只有 1 个 Basic_Days。但我希望它是 2 Basic_Days。
我觉得我并不太远,但我只需要调整我的 Join 中的 AND 语句。
任何帮助表示赞赏!希望我已经解释得足够好,可以理解吗?
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)