我有日历日期,如何在每个日期结束?
Posted
技术标签:
【中文标题】我有日历日期,如何在每个日期结束?【英文标题】:I have Calendar date, How can I bring closing in each date? 【发布时间】:2020-02-13 06:00:22 【问题描述】:我的日历日期介于“2020-01-01”和“2020-01-03”之间。如何在不使用联合的情况下将数量总和带到每个日期,我尝试了以下查询:
SELECT
Date,
Sum(ILE.Quantity)
FROM
Calender C
LEFT JOIN
[XYZ$Item Ledger Entry] ILE
ON
C.Date <= Cast(ILE.[Posting Date] as Date )
WHERE
Date BETWEEN '2020-01-01' AND '2020-01-03'
GROUP BY
Date;
我希望我的结果如下所示
Date Qty
01-01-2020 24550318.91
01-02-2020 24321291.58
01-03-2020 24526795.94
Select Date from Calendar C Where Date Between '2020-01-01'And '2020-01-03'
Select '2020-01-01'[Qty Till],Sum(ILE.Quantity)From[XYZ$Item Ledger Entry]ILE Where [Posting Date] <= '2020-01-01'
Select '2020-01-03'[Qty Till],Sum(ILE.Quantity) From[XYZ$Item Ledger Entry]ILE Where [Posting Date] <= '2020-01-02'
Select '2020-01-03'[Qty Till],Sum(ILE.Quantity) From[XYZ$Item Ledger Entry]ILE Where [Posting Date] <= '2020-01-03'
【问题讨论】:
请求您共享输入和预期输出数据集。这样,社区就能更好地回答您的问题。 【参考方案1】:您的查询应该有效,但我相信您的情况可能相反。以下仅考虑过去这 3 天的条目:
C.Date <= Cast(ILE.[Posting Date] as Date)
如果您想要记录之前这些日期,那么您需要切换它:
Cast(ILE.[Posting Date] as Date) <= C.Date
如果要加快查询速度,请在[Posting Date]
列上创建索引:
CREATE NONCLUSTERED INDEX NCI_LedgerEntry_PostingDate ON [XYZ$Item Ledger Entry] ([Posting Date])
然后避免在比较中将值转换为日期(尽管引擎可能仍使用索引,但不确定):
ILE.[Posting Date] < DATEADD(DAY, 1, C.Date)
【讨论】:
嗨有没有办法更快地执行这个查询以上是关于我有日历日期,如何在每个日期结束?的主要内容,如果未能解决你的问题,请参考以下文章