2015-07-06 87 views
1

結果我試圖讓第一(最低)開始一個員工的日期:組由分日期時間

SELECT a.StartDate, a.EmpID, b.fullname FROM Employees a 
LEFT JOIN dbo.info b ON a.EmpID = b.EmpID 
WHERE 
    type = 800 
    GROUP By EmpId 
    ORDER BY fullname 

結果與此類似:

StartDate | EmpId 
1992-12-01 00:00:00.000 | 7 
2014-01-01 00:00:00.000 | 7 
2015-01-01 00:00:00.000 | 7 
1992-12-01 00:00:00.000 | 10 
2014-01-01 00:00:00.000 | 10 
2015-01-01 00:00:00.000 | 10 
1992-01-01 00:00:00.000 | 16 
2014-01-01 00:00:00.000 | 16 
2015-01-01 00:00:00.000 | 16 

要得到的最低日每個員工我都試過這個,但是卻導致了一個錯誤。

SELECT MIN(a.StartDate), a.EmpID, b.fullname FROM Employees a 
LEFT JOIN dbo.info b ON a.EmpID = b.EmpID 
WHERE 
    type = 800 
    GROUP By EmpId 
    ORDER BY fullname 

什麼是正確的查詢得到如下結果:

StartDate | EmpId 
1992-12-01 00:00:00.000 | 7 
1992-12-01 00:00:00.000 | 10 
1992-01-01 00:00:00.000 | 16 
+4

SELECT MIN(起始日期)的EmpID ......通過的EmpID組? – jarlh

+0

@jarlh我重寫了問題 –

回答

2
SELECT a.StartDate, a.EmpID, b.fullname 
FROM Employees a 
LEFT JOIN dbo.info b ON a.EmpID = b.EmpID 
WHERE type = 800 
AND NOT EXISTS (SELECT 'a' 
       FROM Employees a2 
       WHERE a.EmpID = a2.EmpID 
       AND a2.StartDate < a.StartDate 
       ) 
1

需要每個EmpID一個結果行,所以這是你應該列組由:

SELECT MIN(StartDate), EmpID 
FROM  Employees 
WHERE type = 800 AND EmpID BETWEEN 1 AND 500 
GROUP BY EmpID 
+0

適用於查詢,但不適用於左連接查詢。看到我更新的問題。 –

0
SELECT MIN(StartDate), EmpID FROM Absences 
WHERE type = 800 
AND EmpID BETWEEN 1 AND 500 
GROUP BY StartDate 

你的團隊是在錯誤的領域。

GROUP BY EmpID 
+0

你也可能想在EmpID上使用HAVING而不是WHERE。 –

0

使用此查詢, 這將停止重複數據

SELECT Distinct StartDate, EmpID FROM Employees 
0
SELECT DISTINCT a.EmpID, b.fullname, a.StartDate FROM Employees a 
LEFT JOIN dbo.info b 
ON a.EmpID = b.EmpID 
WHERE type = 800  
ORDER BY a.StartDate, b.fullname ASC 
+0

屬於員工(更新的問題)。我得到:b.fullname'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 –

+0

檢查現在的解決方案。在這裏,我們使用不同的關鍵字來避免重複。所以,我們不需要分組。 – kasim