2016-04-14 41 views
0

Yavaş Değişen Boyutlu bir tablom var ve ondan rapor vermem gerekiyor.SQL Server Sipariş Raporlama için SCD

Bu 3 sütun bulunur: EmpID, Maaş, BaşlangıçTarihi

Ben Tarihe göre bunları sırayla gösterilecek lüzum
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 

, ancak birlikte Emp ID tutarak örn:

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 

neler Order by maddesi mi olacak?

cevap

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

Çok teşekkür ederim de tarihte bir rütbe sağlar. Bunu daha önce yapmayı denedim, ama bölüm yanlıştı, bu yüzden benim için çalışmadı. Çözümü verdikten sonra bölümü doğru buldum. Güzel çalışıyor. – needshelp

0

Sen sorguya aşağıda deneyebilirsiniz

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

Açıklama: Biz ilk her EmpID maksimum StartDate bulmalıyız ve desc sonra sıralama tüm çalışanların setleri sipariş. Her sette tekrar tarihe göre sıralarız. Yukarıdaki sorguda

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

çalışan başına maksimum tarih ve