我有日历日期,如何在每个日期结束?

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)

【讨论】:

嗨有没有办法更快地执行这个查询

以上是关于我有日历日期,如何在每个日期结束?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得当前日期前 30 天?

日历控制如何传递日期、开始日期和结束日期

在雪花中创建具有动态日期范围的日历表

在熊猫中传播范围日期

如何计算定义自定义财务日历的两个日期之间的月数?

如何在 ASP.net Core 中创建日历日期/选择器?