sql如何获取数据库中最新的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何获取数据库中最新的数据相关的知识,希望对你有一定的参考价值。
参考技术A elect A.userid ,max(B.userid) form A,B where A.id = B.id(+)如何在 SQL 中获取最新的非负值?
【中文标题】如何在 SQL 中获取最新的非负值?【英文标题】:How to get the latest non-negative value in SQL? 【发布时间】:2021-11-06 01:55:07 【问题描述】:我有以下数据集。
date | orig | dest | value |
---|---|---|---|
11-4 | S8 | B9 | -42 |
10-30 | S8 | B9 | -2999 |
10-15 | S8 | B9 | 959 |
10-14 | S8 | B9 | 480 |
10-13 | S8 | B9 | 0 |
10-9 | S8 | B9 | 503 |
我怎样才能把它变成这样的东西?
date | orig | dest | value | new value |
---|---|---|---|---|
11-4 | S8 | B9 | -42 | 959 |
10-30 | S8 | B9 | -2999 | 959 |
10-15 | S8 | B9 | 959 | 959 |
10-14 | S8 | B9 | 480 | 480 |
10-13 | S8 | B9 | 0 | 503 |
10-9 | S8 | B9 | 503 | 503 |
这是我用过的,不正确:
CASE WHEN value <= 0
THEN last_value(value) over (PARTITION BY orig, dest ORDER BY date DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
ELSE value
END as new_value
这里的目标是不要用最近的最大值替换
【问题讨论】:
【参考方案1】:这应该在 Redshift 中完成:
SELECT date, orig, dest, value
, max(value) OVER (PARTITION BY orig, dest, grp) AS new_value
FROM (
SELECT date, orig, dest, value
, count(value > 0 OR NULL) OVER (PARTITION BY orig, dest ORDER BY date) AS grp
FROM tbl
) sub
解释:
Retrieve last known value for each column of a row关于count(expression OR NULL)
,见:
不幸的是,Redshift 没有跟上对 Postgres 的改进,并且缺少聚合的 FILTER
子句(自 Postgres 9.4 起!),这会更快、更优雅:
SELECT date, orig, dest, value
, max(value) OVER (PARTITION BY orig, dest, grp) AS new_value
FROM (
SELECT date, orig, dest, value
, count(*) FILTER (WHERE value > 0) OVER (PARTITION BY orig, dest ORDER BY date) AS grp
FROM tbl
) sub
见:
Get max value from a window of rows as new column for all rows Aggregate columns with additional (distinct) filters【讨论】:
以上是关于sql如何获取数据库中最新的数据的主要内容,如果未能解决你的问题,请参考以下文章