我有3个表,并且已经加入它们以完全输出所需的内容,但是现在我想删除重复的行,以使MISTI col不会显示重复的记录。我曾尝试使用Distinct
,但仍然遇到问题。这是我的SQL查询,可以完全按照我希望的方式减去重复的记录。这也是我的输出的快照
SELECT g.entity AS MISTI,
t.cur_state AS STATE,
ROUND(((SYSDATE - t.cur_state_dttm) * 24), 2) AS HRS,
te.technician
FROM Entity_Grp_Lst g
LEFT OUTER JOIN
trk_id_def t
ON g.facility = t.facility
AND g.grp_type = t.grp_type
AND g.entity = t.entity
AND g.grp_type = '720'
LEFT JOIN
trk_id_technician te
ON t.facility = te.facility
AND t.grp_type = te.grp_type
AND t.trk_id = te.trk_id
AND cur_state_dttm = te.state_in_dttm
WHERE t.cur_state NOT IN ('PROD', 'NM', 'TERM', 'NULL', 'IDLE', 'YER', 'PENG', 'LBQU', 'LBQS', 'I07', '20')
AND Entity_Grp_type = '085'
AND g.ENTITY_GRP = 'MET'
ORDER BY g.entity,
t.cur_state_DTTM DESC;
答案 0 :(得分:1)
它不起作用是因为您有一个与其他列不同的列,并且是“技术人员”列,正如您在发送“技术人员”或“小时”的屏幕截图中看到的那样,它是不同的,因此,即使您使用的distinct无效,因为如果有一些不同的值,基本上整个行都会有所不同,但我还是建议从select中删除“ technician”列:
Select DISTINCT
g.entity as MISTI,
t.cur_state as STATE,
ROUND(((SYSDATE-t.cur_state_dttm)*24),2) AS HRS
,然后尝试使用DISTINCT。
答案 1 :(得分:0)
这些不是重复记录,其他字段的值正在更改。 如果需要在MISTI上保留非重复值,可以执行以下操作:
SELECT MISTI
,STATE
,HRS
,technician
FROM (
SELECT g.entity AS MISTI,
t.cur_state AS STATE,
ROUND(((SYSDATE - t.cur_state_dttm) * 24), 2) AS HRS,
te.technician
ROW_NUMBER() over(partition by g.entity order by te.technician desc) as rn
FROM Entity_Grp_Lst g
LEFT OUTER JOIN
trk_id_def t
ON g.facility = t.facility
AND g.grp_type = t.grp_type
AND g.entity = t.entity
AND g.grp_type = '720'
LEFT JOIN
trk_id_technician te
ON t.facility = te.facility
AND t.grp_type = te.grp_type
AND t.trk_id = te.trk_id
AND cur_state_dttm = te.state_in_dttm
WHERE t.cur_state NOT IN ('PROD', 'NM', 'TERM', 'NULL', 'IDLE', 'YER', 'PENG', 'LBQU', 'LBQS', 'I07', '20')
AND Entity_Grp_type = '085'
AND g.ENTITY_GRP = 'MET'
)q
WHERE q.rn = 1
ORDER BY MISTI,HRS DESC
这会在MISTI上对行进行排名,而我只保留第一行,您可以更改order by子句以匹配您的需要。