我有一個數據集,看起來像這樣:嘗試使用IF與窗函數
ID Location PrimaryLoc Date
21 Tampa Beach Y 2/23/16
21 Miami beach N 2/23/16
21 Hous N 2/23/16
375 LA N 2/17/16
375 SF N 2/17/16
375 SD N 2/17/16
我需要給拉了回來記錄,其中PrimaryLoc =「Y」,或者,如果沒有「Y」然後拉返回第一個'N'(哪個'N'並不重要)。
我在想一個窗口函數會在這裏工作。我嘗試了一個簡單的方法,用1填充'Y',但如果ID沒有'Y',我不知道如何得到'N'。也許一個IF類型的聲明可以工作,但我從來沒有在SQL中做過。
這是我到目前爲止有:
select *, sum(case when PrimaryLoc = 'Y' then 1 else 0 end) over(partition by ID, Location order by date)rn
from table
使用RANK()是,它會返回每個ID多的結果,如果出現平局的問題在ORDER BY中。我的理解是,OP只需要每個ID的一個結果,並且如果有一個平局,那麼返回哪一個並不重要。 –
@TabAlleman是的,我選擇了它專門爲它,在多個'Y'的情況下,但它確實可能是錯誤的選擇,如果在同一天多個'N' – Lamak
感謝您的幫助。 Row_Number()工作。如果沒有「Y」,Rank()將所有記錄帶回='N'。令人沮喪的是,答案確實比我想要做的更簡單。但我想我仍然處於窗口函數的學習階段。 – jackstraw22