【问题标题】:SQL divide hourly data into half hourlySQL将每小时数据分成半小时
【发布时间】:2019-03-07 21:39:38
【问题描述】:

我有一列包含来自两个不同来源的数据 - 一组以每小时粒度和一个半小时拉入。

Datetime           Source    Value  
01/01/2018 14:00   A          20
01/01/2018 14:00   B          15
01/01/2018 14:30   B          11

我想每隔半小时用这些网络创建一个新专栏。

Datetime           Net Value
01/01/2018 14:00   35              --20+15
01/01/2018 14:30   31              --20+11   

感谢任何帮助,

谢谢

【问题讨论】:

  • 您使用的是什么数据库? MSSQL、MySQL、PostgreSQL?
  • 示例结果中的第二行应该是14:30 吗?为什么它不包含与它所包含的20 具有相同时间戳的15 值?
  • 你有 --20+15 等于 35.... 但是 20 是从哪里来的?
  • @APH 谢谢,应该的!我现在已经编辑过了。疲倦 = 错误。
  • @Paolo 使用 mysql。服务器 2016

标签: sql sql-server sql-server-2016 hour


【解决方案1】:

您是否尝试过像这样只按日期和时间加入?

SELECT b.Datetime
    , ISNULL(a.val, 0) + ISNULL(b.val, 0)
FROM myTable b
JOIN myTable a
ON CAST(b.Datetime AS DATE) = CAST(a.Datetime AS DATE)
AND DATEPART(HOUR, b.Datetime) = DATEPART(HOUR, a.Datetime)
AND b.source = 'B' 
AND a.source = 'A'

来自 cmets(谢谢!):try it in this DB Fiddle.

【讨论】:

  • this db fiddle中效果很好
  • 谢谢,APH - 这很有魅力!上述数据适用于几个不同的“单位”。我尝试为每个单元添加一个额外的列,然后运行您的查询,以便它分别为每个单元运行 - 但是,我收到一个“不明确的列名”错误...dbfiddle.uk/… 有什么想法吗? (顺便说一句,那个 db fiddle 网站很棒!)
  • @curns 因为您将MyTable 加入到自身,所以unit 存在于两个表中。您必须指定您的意思 - a.unitb.unit
  • 您可能还需要将a.unit = b.unit 添加到您的加入条件中 - 否则会导致我认为您不想要的重复。
  • 完美运行。感谢磨坊的耐心:)
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
相关资源
最近更新 更多