我有一个缓慢变化的维度的桌子,我需要从它报告。
它有3列: EmpId,工资,StartDate
EmpId, Salary, StartDate
1, 1000, 2016-04-14
2, 3000, 2016-03-13
1, 900, 2016-01-14
3, 4000, 2016-03-14
1, 700, 2011-04-14
2, 2000, 2015-03-14
2, 1000, 2014-03-14我需要按日期按顺序显示它们,但要将Emp ID保存在一起,例如:
EmpId, Salary, StartDate
1, 1000, 2016-04-14
1, 900, 2016-01-14
1, 700, 2011-04-14
3, 4000, 2016-03-14
2, 3000, 2016-03-13
2, 2000, 2015-03-14
2, 1000, 2014-03-14Order by条款是什么?
发布于 2016-04-14 19:47:50
SELECT *
FROM (
SELECT *,
MAX(startDate) OVER (PARTITION BY empId) maxDate
FROM mytable
) q
ORDER BY
maxDate DESC, empId, startDate DESC发布于 2016-04-14 19:51:04
您可以尝试以下查询
select temp.* from temp
left join
( select EmpId, max(startdate) r from temp group by EmpID) t
on temp.Empid=t.empid
order by r desc这里的SQL演示
解释:我们首先需要在每个EmpID上找到最大开始日期,然后按desc顺序对所有员工集进行排序。在每一组中,我们都会按日期重新排序。
在上述查询中
(select EmpId, max(startdate) r from temp group by EmpID) 提供每个员工的最高日期以及该日期的级别。
https://stackoverflow.com/questions/36632389
复制相似问题