[英]SQL- Select just on row
如圖所示,其中有很多addressTypeID帶有相同的Application ID和ValidTo Date行。
有時需要使用AddressTypeID
作為返回列的條件。
我需要進行查詢,以獲取帶有AddressType的條件下的validTo以及來自連接到applicationID的應用程序表中的一些詳細信息:
SELECT APPLICATION_ID, FIRST_NAME, LAST_NAME
,MAIL_DATE = (SELECT VALIDTO FROM ADDRESS WHERE ADDRESSTYPEID = 1)
我需要輸出只是包含該內容的一行:
applicationid - firstname - lastname - validto
38 - John - smith - 2020-12-31 00:00:00.000
39 - Math - Will - 2015-09-23 00:00:00.000
沒有使行重復。
JOIN通常比相關子查詢的性能更好。
如果application_id
和addresstypeid
組合是唯一的,則只需:
SELECT t1.APPLICATION_ID,
t1.FIRST_NAME,
t1.LAST_NAME,
t2.validto
FROM first_table t1
LEFT OUTER JOIN ADDRESS t2
ON t1.application_id = t2.application_id
AND t2.addresstypeid = 1;
如果沒有,您可以執行以下操作:
SELECT t1.APPLICATION_ID,
t1.FIRST_NAME,
t1.LAST_NAME,
t2.validto mail_date
FROM first_table t1
LEFT OUTER JOIN
(SELECT application_id,
MAX(validto) validto
FROM ADDRESS
WHERE addresstypeid = 1
GROUP BY application_id
) t2
ON t1.application_id = t2.application_id;
你可以用這個
SELECT APPLICATION_ID, FIRST_NAME, LAST_NAME
,MAIL_DATE = (SELECT MAX(VALIDTO) FROM ADDRESS WHERE ADDRESSTYPEID = 1)
要么
SELECT APPLICATION_ID, FIRST_NAME, LAST_NAME
,MAIL_DATE = (SELECT Top 1 VALIDTO FROM ADDRESS WHERE ADDRESSTYPEID = 1 Order by ValidTo desc)
嘗試這個,
SELECT * FROM Address WHERE ValidTo IS NOT NULL
OR
SELECT APPLICATION_ID, FIRST_NAME, LAST_NAME, Row FROM
(
SELECT APPLICATION_ID, FIRST_NAME, LAST_NAME,
ROW_NUMBER()
OVER(PARTITION BY Application_ID ORDER BY ValidTo) AS Row
FROM Address
) tmp
WHERE tmp.Row = 1
max(case when addTypeID =1 then addValidTo else '' end)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.