使用分析功能,和case语句,你可以达到结果。假设H列是永远不会有一个负值,这里是查询:
SQL> WITH cte_sample(value,id,h,D) AS (
2 SELECT 1.0, 32, 0, to_date('Jul 18, 2017', 'Mon DD, YYYY') FROM dual UNION ALL
3 SELECT 5.6, 54, 1, to_date('Jul 17, 2017', 'Mon DD, YYYY') FROM dual UNION ALL
4 SELECT 3.5, 178, 2, to_date('Jul 18, 2017', 'Mon DD, YYYY') FROM dual UNION ALL
5 SELECT 3.4, 178, 2, to_date('Jul 16, 2017', 'Mon DD, YYYY') FROM dual UNION ALL
6 SELECT 3.6, 178, 3, to_date('Jul 18, 2017', 'Mon DD, YYYY') FROM dual),
7 ----------------------
8 -- End of data
9 ----------------------
10 extracted_table AS (
11 SELECT CASE WHEN d = trunc(sysdate) THEN VALUE ELSE NULL END AS VALUE,
12 ID,
13 h,
14 d,
15 row_number() OVER(PARTITION BY ID ORDER BY CASE WHEN d = trunc(SYSDATE) THEN -9 ELSE h END) rn
16 FROM cte_sample)
17 SELECT VALUE, ID, h FROM extracted_table WHERE rn = 1;
输出:
VALUE ID H
---------- ---------- ----------
1 32 0
54 1
3.5 178 2
如果你想看到所有的'七月3rd'值的,为什么是'7月2日'值出现在所需的结果集中? – Siyual
除了所有7月3日的价值之外,我还想看看今天没有可用价值的其他ID是什么。我为该ID显示为空54,并没有显示7月2日的价值。 – Deb
2017年7月1日这一行怎么样?为什么它不在结果集中,值为空值? –