2017-02-13 137 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 
相关问题