用于计算每天特定时间的销售额总和的 SQL
Posted
技术标签:
【中文标题】用于计算每天特定时间的销售额总和的 SQL【英文标题】:SQL for Calclate sum of Sales At particular time every day 【发布时间】:2021-12-26 04:32:17 【问题描述】:Order Table.Reprpesents Order Date and Created 是插入记录的时间
Price OrderDate Created
240.00 2021-12-26 2021-12-26 05:17:38.710
13.00 2021-12-26 2021-12-26 04:17:28.810
4.00 2021-12-26 2021-12-26 03:07:50.507
7.00 2021-12-26 2021-12-26 02:07:50.507
119.00 2021-12-26 2021-12-26 01:07:50.507
16 2021-12-25 2021-12-26 23:56:06.810
108.00 2021-12-25 2021-12-26 12:56:02.140
162.00 2021-12-25 2021-12-26 09:50:54.667
40.00 2021-12-25 2021-12-26 05:17:38.710
23.00 2021-12-25 2021-12-26 04:17:28.810
40.00 2021-12-25 2021-12-26 03:07:50.507
7.00 2021-12-25 2021-12-26 02:07:50.507
100.00 2021-12-25 2021-12-26 01:07:50.507
此表中的最新记录位于(创建值)- 05:17:38.710
Select Max(Created) From dbo.TenantOrder -
输出 - 2021-12-26 05:17:38.710
此时是 26 日,即今天的销售日期
Select SUM(Price) From dbo.TenantOrder Where OrderDate = (Select Max(OrderDate) From dbo.TenantOrder)
同时我想知道25号的销量
Select SUM(Price) From dbo.TenantOrder Where OrderDate = (Select (Max(OrderDate) -1) From dbo.TenantOrder) and Created <= (Select Max(Created) -1 From dbo.TenantOrder)
我希望每天都有这种记录,即按订单日期和最大创建时间分组。 所以就像下午 5 点每天的销售额是多少
【问题讨论】:
所以您希望每天对整个表中的结果进行分组,但仅在一天中的时间小于最新行05:17:38.710
的时间的情况下?您使用的是 mysql 还是 SQL Server,请更正您的标签
更正了标签。是的,每天在特定时间销售什么。这样我就可以分析我们从前一天或任何一天以来的落后或领先程度
【参考方案1】:
您似乎想要每天的分组总计,但仅限于与表中最新行标记相同时间的时间。
在 SQL Server 中,您可以使用以下内容
DECLARE @time time = (
SELECT TOP (1)
CAST(o.OrderDate AS time)
FROM dbo.TenantOrder o
ORDER BY o.OrderDate DESC);
SELECT
date = CAST(o.OrderDate AS date),
total = SUM(o.price)
FROM TenantOrder o
WHERE CAST(o.OrderDate AS time) <= @time
GROUP BY
CAST(o.OrderDate AS date);
db<>fiddle
【讨论】:
这没有给出预期的结果,请看我有两个日期时间列,我的 OrderDate 只保留日期,但创建的保持时间字段也始终创建在 utc 中,但 orderdate 可以是任何时区。我试图更改 declare Created 代替订单日期,但我也没有得到预期的结果。对于一个 OrderDate,Created 的日期不必与 UTC 中的创建日期相同,但订单日期可以是任何日期 我不确定你想要什么。预期产出将大有帮助。请编辑您的问题并输入预期输出【参考方案2】:试试下面的代码:
select sum(Price) as SuumPrice
from dbo.TenantOrder
group by OrderDate
在特定时间:
select sum(price) as SuumPrice
from (
select *
from dbo.TenantOrder
where convert(varchar(5),Created ,108) = N'12:10'
) as Dt
group by Dt.OrderDate
【讨论】:
每天我想要的特定时间。 您想要每天的最后一个订单吗? @Manjay_TBAG 为什么是硬编码值。 哪个地方?什么意思? 谢谢@Charlieface 你能告诉我任何新方法吗?我想提高我的 SQL Server 性能技能。非常感谢。以上是关于用于计算每天特定时间的销售额总和的 SQL的主要内容,如果未能解决你的问题,请参考以下文章
您如何使用 MDX 计算 MTD/YTD 平均工作日销售额?