用于报告SCD的SQL Server Order By

时间:2016-04-14 19:36:18

标签: sql-server sql-order-by

我有一张慢变维度表,我需要从中报告。

它有3列: EmpId,Salary,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-14

Order by条款是什么?

2 个答案:

答案 0 :(得分:0)

SELECT  *
FROM    (
        SELECT  *,
                MAX(startDate) OVER (PARTITION BY empId) maxDate
        FROM    mytable
        ) q
ORDER BY
        maxDate DESC, empId, startDate DESC

答案 1 :(得分:0)

您可以尝试以下查询

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 demo here

<强>说明: 我们首先需要在每个EmpID上找到最大的startdate,然后按desc顺序对所有员工集进行排序。在每个集合中,我们按日期排序。

在上面的查询中

(select EmpId, max(startdate) r from temp group by EmpID) 

提供每位员工的最长日期以及日期的排名