我正在尝试将多行数据选择为一行。 例如,使用以下数据集:
NAME THING DATE
----- ------ ------
JACK 1 EARLY
JACK 2 LATER
JACK 3 NOW
JANE 1 LATER
JANE 2 EARLY
JANE 3 NOW
我想产生以下结果:
NAME THING DATE
---- ---- -----
JACK 1, 2, 3 NOW
JANE 1, 2, 3 NOW
所以,我知道我可以使用LISTAGG函数来组合“事物”行,但是我最大的问题是如何在多行中进行选择以在日期字段中获得“现在”值。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
尚不清楚您是否想要任何事物的最新日期(按日期或按其自身的值对汇总的事物进行排序):
select name,
listagg(thing, ',') within group (order by date_col) as things,
max(date_col) as now
from your_table
group by name
order by name;
或对应于事物最高价值的日期:
select name,
listagg(thing, ',') within group (order by thing) as things,
max(date_col) keep (dense_rank last order by thing) as now
from your_table
group by name
order by name;
正如您所说的,这些实际上是日期,带有两个名称的添加日期值的示例数据略有不同:
NAME THING DATE_COL
---- ---------- ----------
JACK 1 2019-01-01
JACK 2 2019-03-15
JACK 3 2019-04-30
JANE 1 2019-02-01
JANE 2 2019-05-03
JANE 3 2019-04-02
第一个查询得到:
NAME THINGS NOW
---- --------------- ----------
JACK 1,2,3 2019-04-30
JANE 1,3,2 2019-05-03
第二个查询得到:
NAME THINGS NOW
---- --------------- ----------
JACK 1,2,3 2019-04-30
JANE 1,2,3 2019-04-02