簡體   English   中英

SQL-僅在行上選擇

[英]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_idaddresstypeid組合是唯一的,則只需:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM