【问题标题】:How to get the last 7 days data from sql如何从sql中获取最近7天的数据
【发布时间】:2020-09-03 02:17:39
【问题描述】:

我正在使用这个可以正常工作并检索我想要的值的查询,唯一的问题是,如果给定日期没有值,它不会将值显示为 0。

我需要的数据是过去 7 天的销售额总和,如果没有销售额,则返回 0。

SELECT 
    DATEADD(DAY, 0, DATEDIFF(day, 0, vendas.data)) AS data, 
    COUNT(aff_sub.N_Enc) AS tot_enc, 
    SUM(aff_sub.Valor) AS tot_vendas 
FROM 
    aff_sub 
INNER JOIN 
    vendas ON aff_sub.N_Enc = vendas.ID 
WHERE 
    (aff_sub.ID = 1538)  
    AND (vendas.data >= DATEADD(day, - 7, GETDATE())) 
GROUP BY 
    DATEADD(DAY, 0, DATEDIFF(day, 0, vendas.data))

谁能帮帮我? 谢谢

【问题讨论】:

  • 考虑使用日期序列创建日历实用程序表或使用 CTE 生成日期序列。然后,您可以将其包含在查询中以获取所有感兴趣的日期以及 LEFT JOIN 以在该日期存在数据时返回相关数据。

标签: sql-server group-by datediff dateadd


【解决方案1】:

您尝试以下逻辑,使用 CTE 生成最后 7 天,始终考虑 getdate()

WITH dates as 
(
  select cast(getdate() as date) as dte, 1 as cnt
  union all
  select dateadd(day, -1, dte), cnt + 1
  from dates
  where cnt < 7
)

SELECT dte,
COUNT(A.N_Enc) AS tot_enc, 
SUM(A.Valor) AS tot_vendas
FROM dates D
LEFT JOIN vendas V ON V.data = D.dte
LEFT JOIN aff_sub A ON A.N_Enc = V.ID
GROUP BY dte

【讨论】:

  • 您好,感谢您的 awnser,但是当我使用它时,它给出了错误:Cannot call methods on dateThanks
  • 我设法让它工作,但是当我放置 where 子句时,它不再显示数据
  • 已解决,我不能使用 where 子句,它必须全部带有正确的连接。谢谢
  • @PedroCorreia 很高兴听到它对你有用 :)
猜你喜欢
  • 2019-09-14
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多