【问题标题】:Subtracting Data of current row from Next row in Sql从Sql中的下一行中减去当前行的数据
【发布时间】:2020-04-17 06:48:41
【问题描述】:

我试图通过从 2 中减去第 1 行来获得数据的差异。由于我不擅长 SQL,所以我尝试过但遇到问题来获得正确的查询。

我有一个表格,其中存储了一些基于不同城市和日期的案例数据。 我已经根据州名称的分区和按日期的升序排序给他们排名,这样如果需要我可以使用排名列。

我想从 2 中减去排名 1 的 Confirmed_cases_data,从 3 中减去 2,减去的数据将分别存储在每天的确诊病例列中,分别具有 RANK 2 和 3。

我也使用了 Lag 函数,但它的作用是同时减去 2 个不同状态之间的数据。

查询:

select state_name, confirmed_cases,
confirmed_cases - coalesce(lag(confirmed_cases) over (order by confirmed_cases), 0) as Confirmed_cases_per_day
from table

请帮助获取正确的查询。

已附上表格图片。

【问题讨论】:

  • 您使用的是哪个 dbms?

标签: sql


【解决方案1】:

您需要在您的 OVER 子句中使用 PARTITION 以获取 LAG 仅查看该状态数据:

lag(confirmed_cases) over (partition by state_name order by confirmed_cases)

Demo on dbfiddle

请注意,您通常可以为lag 提供默认值以避免coalesce

lag(confirmed_cases, 1, 0) over (partition by state_name order by confirmed_cases)

Demo on dbfiddle

【讨论】:

  • 非常感谢尼克。感谢您快速而可靠的回复!
  • @VishalMishr 不用担心 - 我很高兴能提供帮助。
猜你喜欢
  • 2015-08-10
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多