我需要附加excel文件的数据加载。 附件包含单位编号及其类型(D_NUMBER)及其值(R_Value)的数据。
要求如下:
1)对于每个单位号码,我需要有1条记录
2)如果单元序列号有多个记录,则使用的逻辑是: - 考虑以F开头的D_NUMBER记录 - 如果我们有多个记录,其中D_NUMBER以F开头,我们需要考虑该集合中的Max D_NUMBER。 - 如果单位编号没有以F开头的D_NUMBER,那么我们需要考虑从G或E开始的D_NUMBER - 如果单位编号确实有D_NUMBER从F或G开始,那么我们需要考虑从G开始的D_NUMBER
如何设计Talend作业以满足要求或构建SQL查询以在talend中使用它?
答案 0 :(得分:1)
您可以使用ROW_NUMBER
或RANK
分析功能对结果进行排名。他们都使用ORDER BY
条款。在ORDER BY
中,您可以使用DECODE
或CASE
来有条件地订购行。
SELECT *
FROM (
SELECT UNIT_NUMBER,
D_NUMBER,
R_VALUE,
ROW_NUMBER() OVER(PARTITION BY UNIT_NUMBER
ORDER BY DECODE(SUBSTR(D_NUMBER, 1, 1),
'F', 1,
'G', 2,
'E', 3,
4),
D_NUMBER DESC) N_ROW
FROM <your_table_name>)
WHERE N_ROW = 1
此外,您还不清楚是否需要最大D_NUMBER
字符串或最大数值。在示例中,我只是将D_NUMBER
放入ORDER BY
。如果需要其数值,可以使用正则表达式从字符串中提取数字并转换为数字。
TO_NUMBER(REGEXP_SUBSTR(D_NUMBER, '\d+'))