2016-08-16 88 views
3

選擇行,這是我的表名tblPE如何與最大日期

PEID |idnum | PE_DATE_EXAM | ATTENDANCE  
1 | 39 | 2014-08-01  | PRESENT  
2 | 42 | 2014-08-10  | ABSENT    
3 | 39 | 2014-08-12  | PRESENT   
4 | 43 | 2014-08-05  | PRESENT   
5 | 42 | 2014-07-15  | NULL   
6 | 39 | 2014-07-03  | ABSENT  
7 | 41 | 2014-08-01  | PRESENT  

我想選擇最大PE_DATE_EXAM值,其中IDNUM = 39和考勤=當前

的結果應該是:

PEID |idnum | PE_DATE_EXAM | ATTENDANCE 
------------------------------------------- 
3 | 39 | 2014-08-12  | PRESENT 

回答

3

對於單個記錄回報,你可以使用LIMIT

SELECT * FROM tblPE t 
WHERE t.idnum = 39 AND t.ATTENDANCE = 'PRESENT' 
ORDER BY t.PE_DATE_EXAM DESC 
LIMIT 1; 

如果你想它的動態所有idnum的,你可以使用NOT EXISTS()

SELECT * FROM tblPE t 
WHERE NOT EXISTS(SELECT 1 FROM tblPE s 
       WHERE t.idnum = s.idnum AND s.ATTENDANCE = 'PRESENT') 
    AND t.attendance = 'PRESENT' 
+1

一不小心你之前''把ORDER BY t.PE_DATE_EXAM DESC' WHERE ..' – 1000111

+0

我做了啥子ü說,但遇到錯誤.. –

+1

錯誤 SQL查詢:文檔 SELECT * FROM tblPE牛逼ORDER用t .PE_DATE_EXAM DESC WHERE t.idnum = 39和t.ATTENDANCE = '存在' 限制1 LIMIT 0,25 MySQL表示:文件 #1064 - 你在你的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以找到正確的語法,以便在'WHERE t.idnum = 39 AND t.ATTENDANCE ='PRESENT' 第1行處限制0,25' –

0
SELECT top 1 * FROM tblPE t 
    WHERE t.idnum = 39 AND t.ATTENDANCE = 'PRESENT' ORDER BY t.PE_DATE_EXAM DESC; 
+1

'TOP 1'是SQL-Server語法。 – sagi

+1

非常thanks..i實際上沒有it..thank你米娜 –

2

你可以使用相關子查詢找到特定的ID(S)的最大日期。我個人認爲這是更可讀和更直接。此外,這種方法通常是語言無關(假設我們指的是關係型SQL數據庫)https://en.wikipedia.org/wiki/Correlated_subquery

SELECT * 
FROM tblPE t1 
WHERE t1.Date = (
       SELECT MAX(Date) 
       FROM tblPE t2 
       WHERE t1.Id = t2.Id 
       ) 
AND t1.Id = 39; 
+1

是的,但它不是一個不相關的查詢速度較慢只是有點 – Strawberry

+0

@Strawberry真實的,你需要多一點的性能損失的,那是要指出一件好事!根據我的經驗,當你開始達到相當大的數據集大小時,它真的變得非常痛苦。但對於中小型數據集,應該是可以的。 –

1

對於一個更通用的解決方案:

SELECT PEID, idnum, PE_DATE_EXAM, ATTENDANCE 
FROM tblPE 
WHERE idnum = 39 AND ATTENDANCE = 'PRESENT' AND PE_DATE_EXAM in (
    SELECT MAX(PE_DATE_EXAM) 
    FROM tblPE 
    WHERE idnum = 39 AND ATTENDANCE = 'PRESENT') 
0
select PEID,IDNUM,PE_DATE_EXAM,ATTENDANCE 
from 
(select PEID,IDNUM,PE_DATE_EXAM,ATTENDANCE,dense_rank() over(order by PE_DATE_EXAM desc) rnum 
from TBLPE 
order by PE_DATE_EXAM desc) 
where rnum = '1'; 

此查詢基於查詢的書面結果。如果您需要澄清,請告訴我。