如何在sql中创建groupby和添加number字段

iaqfqrcu  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(262)

我正在尝试编写一个sql语句,它将从我解析出来的子字符串中获取值,然后以某种方式对它们进行排序,以反映我在屏幕前端看到的内容。我这么做还有一个更长远的原因,那就是有些脚本会自动把我在电子表格中的数据输入到程序的前端,但它们必须以程序可以读取的方式设置。。。长话短说,其中一个涉及到一个“pick”列,它使用该列来确定在按“enter”之前将发出的“tab”的数量
长话短说,我的数据是这样的

SubStr(CONCATField, 1, 4) SubStr(CONCATField, 5, 5) SubStr(CONCATField, 6, 4) EffectiveDate ENDDATE

我按 EffectiveDate Descending .
假设我有以下查询中的数据

SELECT
    SubStr(CONCATField, 1, 4), 
    SubStr(CONCATField, 5, 5), 
    SubStr(CONCATField, 6, 4), 
    EffectiveDate, ENDDATE
FROM
    TABLE
WHERE
    XXXXX
ORDER BY
    SELECT 
        SubStr(CONCATField, 1, 4), 
        SubStr(CONCATField, 5, 5), 
        SubStr(CONCATField, 6, 4), 
        EffectiveDate DESC, ENDDATE DESC

输出:

FCCC T1234  P123  20190101 99991231
FCCC T1234  P123  20160101 20181231
FCCC T1234  P123  20150101 20151231
FCCC T1234  P456  20190101 99991231
FCCC T1234  P456  20160101 20181231
FCCC T1234  P456  20150101 20151231

我想添加一个名为pick的列,它将按如下方式排列组的编号。
substr(concatfield,1,4)substr(concatfield,5,5)substr(concatfield,6,4)

EffectiveDate ENDDATE
FCCC T12345  P123  20190101 99991231 1
FCCC T12345  P123  20160101 20181231 2
FCCC T12345  P123  20150101 20151231 3
FCCC T12345  P456  20190101 99991231 1
FCCC T12345  P456  20160101 20181231 2
FCCC T12345  P456  20150101 20151231 3


思想?

ruyhziif

ruyhziif1#

你好像在找 row_number() :

select t.*,
       row_number() over (partition by SubStr(CONCATField, 1, 4), SubStr(CONCATField, 5, 5), SubStr(CONCATField, 6, 4) order by enddate desc) as pick
from t;

可以将子字符串简化为 substr(CONCATfield, 1, 13) ,如果你愿意的话。

相关问题