我有一张如下表:
Id fkEmp_id Date Type
1 1 2016-08-20 1
2 2 2016-08-28 1
3 2 2016-08-30 0
我想根据" Type"选择记录。 <> 0和"日期"应该是每个员工的最长日期。
我尝试以下查询:
select * from table where Type <> 0 and fkEmp_Id = 2 order by max(Date)
但结果如下所示:
Id fkEmp_id Date Type
2 2 2016-08-28 1
如果Type为1且每个FkEmp_id的Date为Max,那么我只想获取记录。怎么做?请帮帮我。
答案 0 :(得分:2)
这是一个简单的典型聚合(GROUP BY) query。
SELECT MAX(Date) as MaxDate, fkEmp_id
FROM table
WHERE Type <> 0
GROUP BY fkEmp_id
答案 1 :(得分:0)
因此,从获得每个员工fkemp_id的“最大日期”的查询开始。
然后将该查询用作内联视图。将其连接到原始表以过滤掉除了类型&lt;&gt; 0和日期与给定fkemp_id的“最大日期”匹配的行之外的所有行。
例如:
SELECT t.id
, t.fkemp_id
, t.date
, t.type
FROM ( -- inline view query to return maximum date for each fkemp_id
SELECT n.fkemp_id
, MAX(n.date) AS max_date
FROM mytable n
GROUP BY n.fkemp_id
) m
JOIN mytable t
ON t.fkemp_id = m.fkemp_id
AND t.date = m.max_date
AND t.type <> 0
ORDER BY t.fkemp_id
答案 2 :(得分:0)
您可以按如下方式使用子查询:
SELECT max(date), fkemp_id from emp
where fkemp_id not in (Select fkemp_id from emp where type = 0)
GROUP by fkemp_id