我是SQL查询领域的新手。 我需要消除重复的Staff#并仅检索突出显示的行。 任何帮助都非常感谢。
Staff# Pay_DT Due_DT loan_flag housing
------------------------------------------------------------------------
123-45-6789 14-Feb-14 3-Jan-14 Y null
123-45-6789 14-Feb-14 3-Jan-14 Y Annual
123-45-6789 14-Feb-14 13-Jan-14 Y null
**123-45-6789 14-Feb-14 13-Jan-14 Y Annual**
123-45-6789 null null Y null
123-45-6789 null null Y Annual
答案 0 :(得分:0)
也许你想要
SELECT *
FROM (SELECT a.*,
rank() over (partition by staff# order by pay_dt desc) rnk
FROM table_name a
WHERE housing = 'Annual')
WHERE rnk = 1
可替换地
SELECT *
FROM (SELECT a.*,
max(pay_dt) over (partition by staff#) max_pay_dt
FROM table_name a
WHERE housing = 'Annual')
WHERE pay_dt = max_pay_dt
如果您可以拥有关联(两行具有相同的pay_dt
,其中housing
列的值Annual
的值为Staff#
,则这两个查询将返回具有该条件的所有行。如果你想任意打破领带,你可以使用row_number
而不是rank
。否则,你需要告诉我们你的逻辑是什么&#39 ; d想用来打破关系。