2017-04-24 67 views
0

我目前有這個問題,我想弄清楚如何解決在查詢的最後四(4)年部分加入。任何幫助,將不勝感激。謝謝不能弄清楚如何顯示工作年數(包括年數少於4)

問題: 列出所有的醫生,這是目前活躍的診所醫生,這是女性和加入過去四(4)年。顯示醫生的名字和他們的主管的名字。

當前查詢:

SELECT CONCAT(d.given, d.surname) AS Doctor_Name, 
CONCAT(s.given, s.surname) AS Supervisor_Name 
FROM doctor d, doctor s 
WHERE s.doctorid = d.supervisorid 
AND d.resigned IS NULL 
AND d.sex = 'f' 
AND YEAR(d.joined) > 2013 

選項2

SELECT CONCAT(doc.given,' ',doc.surname) AS Doctor_Name, 
CONCAT(sup.given,' ',sup.surname) AS Supervisor_Name, 
doc.sex, 
doc.joined 
FROM doctor doc, doctor sup 
WHERE sup.doctorid = doc.supervisorid 
AND doc.resigned IS NULL 
AND doc.sex = 'F' 
AND YEAR (doc.joined) >= YEAR(CURRENT_DATE - INTERVAL 4 YEAR) 
ORDER BY doc.joined 
+0

這些查詢以何種方式提供不正確的結果?爲什麼你刪除了SQL上的代碼格式? – Jerrad

+0

'年(Getdate()) - YEAR(d.joined)> = 4' –

+0

d.joined> = Dateadd(y,-4,d.joined),但是這會給你一天的準確性而不是年份準確性如上。將取決於你需要什麼。 – ThatChris

回答

0
SELECT 
    CONCAT(d.given, d.surname) AS Doctor_Name, 
    CONCAT(s.given, s.surname) AS Supervisor_Name 
FROM doctor d 
JOIN doctor s 
    ON s.doctorid = d.supervisorid 
WHERE 
    d.resigned IS NULL 
    AND d.sex = 'f' 
    AND DATEDIFF(YEAR,d.joined,GETDATE()) < 4 

所以這裏的一點是,

DATEDIFF(YEAR,d.joined,GETDATE()) < 4 

將減去從GETDATE d.joined年()所以如果加入是2015-01-01和GET DATE()返回2017年1月1日,結果將是2 如果您更希望從現在4年你會做

DATEDIFF(DAY,d.joined, GETDATE()) < 4*365 

這大約是正確的,但如果我們不處理閏年以及跨越一個世紀的界限,或者如果時間週期不是四年而是其他時間。

+0

雖然這可以更正答案的問題,最好添加一個快速解釋它是如何工作的 – jean