用于计算每天特定时间的销售额总和的 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 平均工作日销售额?

使用多个 WHERE 子句和 GROUP BY 销售人员访问 SQL、聚合总和

用于跟踪全年销售的 SQL 关系数据库

sql 获取每月当前的年度总销售额

每天获取产品销售额的平均值并计算销售额为正的天数