【问题标题】:How to get each 10 days of data between year in sql/postgresql?如何在 sql/postgresql 中获取一年之间每 10 天的数据?
【发布时间】:2020-08-21 09:22:50
【问题描述】:

我正在尝试编写一个查询,我想在 2 年内每 10 天获取一次数据。 我正在获取特定日期到当前日期之间的数据。但我不知道如何获取每 10 天的数据 在所选日期之间。

这是我当前的查询。我会很感激任何帮助。谢谢!

SELECT "Name","id",cast(sum("amount")/100 as money) AS "AMOUNT", sum(1) AS "COUNT" from table1
WHERE "DATETIME" BETWEEN '01-01-2019' AND now() - interval '10 days'
GROUP BY "Name","id"
HAVING sum("amount") > 3000

期望它获取从 01-01-2019 到当前日期的每 10 天的数据

【问题讨论】:

  • 将一些示例数据放入您的预期输出中。
  • edit您的问题(通过点击下面的edit链接)并添加一些示例数据和基于该数据的预期输出为formatted text .请参阅here,了解有关如何创建漂亮的文本表格的一些提示。 (edit 您的问题 - 在 cmets 中邮政编码或其他信息)

标签: sql postgresql date


【解决方案1】:

如果您的意思是您每天都有大量数据,并且您希望从 2019-01-01 开始将其分组为 10 天的块,那么您可以生成每 10 天的时间序列并加入给它的真实数据:

select 
  tendays.day, 
  "Name", 
  "id", 
  cast(sum("amount")/100 as money) as "AMOUNT", 
  sum(1) as "COUNT"   
from 
  generate_series ('2019-01-01'::timestamp, now()::timestamp, '10 day'::interval) AS tendays(day) 
  LEFT JOIN
  (select '2019-01-02'::timestamp as "DATETIME", 'a' as "Name", 'b' as "id", 1 as "amount" ) t1
  ON 
    t1."DATETIME" >= tendays.day AND 
    t1."DATETIME" < (tendays.day + interval '10 days')
group by "Name","id", tendays.day
having sum("amount") > 3000

我不太清楚您是否要保留现有的名称和 ID 分组。此外,请注意您的 HAVING - 只有在名称/ID 对在 10 天内的总金额超过 3000 时,您才会获得结果

我已将其设为左连接,因此您可以删除 HAVING 并查看是否有任何十天的块没有符合条件的数据。如果这对您不重要,可以将其替换为 INNER JOIN

【讨论】:

  • 没问题!关于如何使用堆栈溢出的快速教程:当有人写出您认为有用或有帮助的答案时,请单击数字上方的向上箭头。当有人写下您最终用来解决问题的答案时,单击灰色勾号将其变为绿色。任何数量的答案都可以标记为有用,包括您勾选的答案,但只能勾选一个答案。解决问题后勾选答案 - 它会改变仪表板上问题的外观,以便人们知道您不是仍在寻找答案
【解决方案2】:

本质上是为了获取物品,以特定的时间间隔分隔,您可以使用特定的日期差异GROUP BY它们:

SELECT ...
FROM ...
GROUP BY DATEADD(DAY, 10, DATEDIFF(day, 0, '2019-01-01'), 0)
...

请尝试以上方法以满足您的确切需求。

更新:

对于 Postgres,DATEDIFF 替代方案可以使用 EXTRACTDATEPART
感谢@a_horse_with_no_name 注意到这一点。

【讨论】:

  • Postgres 中没有 datediff
  • 你能说得更具体些吗?你在DAY提到的。 DAY 出错了
  • 在 T-SQL 中 DAY 是一个内置关键字,但在 Postgres 中似乎可以选择“day”。
  • 我真的不明白 datediff 的作用,但似乎将 10 天添加到日期是一种复杂的方式?那将是 Postgres 中的 date '2019-01-01' + 10
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多