2017-02-13 167 views
0

我需要選擇包含日期和時間兩列的學術表中的最後一條記錄。當我運行查詢時出現錯誤。當子查詢未與EXISTS一起引入時,只能在選擇列表中指定一個表達式。選擇日期和時間列的最後一條記錄

USE PCUnitTest 
SELECT  C.ACCOUNTNO, C.CONTACT, C.LASTNAME, C.KEY4, A.PEOPLE_ID, A.APP_STATUS, A.APP_DECISION, A.REVISION_DATE, A.REVISION_TIME 
FROM   ACADEMIC AS A INNER JOIN 
         GM.dbo.CONTACT1 AS C ON A.PEOPLE_ID = C.KEY4 
WHERE A.REVISION_DATE = (SELECT  TOP (1) REVISION_DATE, REVISION_TIME, PEOPLE_CODE, PEOPLE_ID, PEOPLE_CODE_ID, ACADEMIC_YEAR, ACADEMIC_TERM, ACADEMIC_SESSION, PROGRAM, DEGREE, CURRICULUM 
FROM   PCUnitTest.dbo.ACADEMIC 
ORDER BY REVISION_DATE DESC, REVISION_TIME DESC) 
+2

'SELECT TOP(1)REVI SION_DATE,REVISION_TIME,...'選擇您要分配給'A.REVISION_DATE'的多個列。這對你有意義嗎? –

+0

是的,但時間和日期在不同的列中,時間取決於日期。它會在哪裏日期=東西,以及時間=什麼東西? – ERPISE

+0

該學術表有7個鍵,我需要選擇最後一條記錄,並通過REVISION_DATE,REVISION_TIME更新PEOPLE_ID的狀態列。該學術表有7個關鍵PEOPLE_CODE_ID,ACADEMIC_YEAR,ACADEMIC_TERM,ACADEMIC_SESSION,PROGRAM,DEGREE,CURRICULUM – ERPISE

回答

0

您可以加入您使用查詢其中

USE PowerCampusUnitTest 
SELECT C.ACCOUNTNO, C.CONTACT, C.LASTNAME, C.KEY4, A.PEOPLE_ID, A.APP_STATUS, A.APP_DECISION, A.REVISION_DATE, A.REVISION_TIME 
FROM ACADEMIC AS A 
INNER JOIN GoldMineUnitTest.dbo.CONTACT1 AS C 
ON A.PEOPLE_ID = C.KEY4 
INNER JOIN (
SELECT TOP 1 A2.REVISION_DATE,A2.REVISION_TIME FROM PowerCampusUnitTest.dbo.ACADEMIC A2 
ORDER BY REVISION_DATE DESC, REVISION_TIME DESC 
)AS A2 
ON A.REVISION_DATE = A2.REVISION_DATE AND A.REVISION_TIME = A2.REVISION_TIME 
0

使用ROW_NUMBER()

USE PCUnitTest 

SELECT 
R.ACCOUNTNO, R.CONTACT, R.LASTNAME, R.KEY4, R.PEOPLE_ID, R.APP_STATUS, R.APP_DECISION, R.REVISION_DATE, R.REVISION_TIME 
FROM 
(
SELECT  C.ACCOUNTNO, C.CONTACT, C.LASTNAME, C.KEY4, A.PEOPLE_ID, A.APP_STATUS, A.APP_DECISION, A.REVISION_DATE, A.REVISION_TIME 
    ,ROW_NUMBER() OVER (ORDER BY A.REVISION_DATE DESC, A.REVISION_TIME DESC) RN 
FROM   ACADEMIC AS A INNER JOIN 
         GMUnitTest.dbo.CONTACT1 AS C ON A.PEOPLE_ID = C.KEY4 
) R 
WHERE RN=1 

如果你想獲得最新的行每個PEOPLE_ID,再加入PARTITION BY

SELECT 
R.ACCOUNTNO, R.CONTACT, R.LASTNAME, R.KEY4, R.PEOPLE_ID, R.APP_STATUS, R.APP_DECISION, R.REVISION_DATE, R.REVISION_TIME 
FROM 
(
SELECT  C.ACCOUNTNO, C.CONTACT, C.LASTNAME, C.KEY4, A.PEOPLE_ID, A.APP_STATUS, A.APP_DECISION, A.REVISION_DATE, A.REVISION_TIME 
    ,ROW_NUMBER() OVER (PARTITION BY A.PEOPLE_ID ORDER BY A.REVISION_DATE DESC, A.REVISION_TIME DESC) RN 
FROM   ACADEMIC AS A INNER JOIN 
         GMUnitTest.dbo.CONTACT1 AS C ON A.PEOPLE_ID = C.KEY4 
) R 
WHERE RN=1 
相關問題