2015-07-06 88 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