Aradığım sonuçları elde edemiyorum diye bazı arama yaptım. Temel olarak şirketimizde dört farklı yönetim sistemimiz var ve her sistemden gelen verileri düzenli olarak bir araya getirme aşamasındayım. Amacım, verileri her saat başı bir merkezi veritabanına güncellemektir.Veritabanından her gruptaki son kaydı alma - SQL Server 2005/2008
COMPUTERNAME | SERIALNUMBER | USERNAME | LASTIP | LASTUPDATE | SOURCE
TEST1 | 1111 | BOB | 1.1.1.1 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST1 | 1111 | BOB | 1.1.1.1 | 1/18/2011 01:00:00 | MGMT_SYSTEM_2
TEST1 | 1111 | PETER | 1.1.1.11 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST2 | 2222 | GEORGE | 1.1.1.2 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST3 | 3333 | TOM | 1.1.1.3 | 1/19/2011 01:00:00 | MGMT_SYSTEM_2
TEST4 | 4444 | MIKE | 1.1.1.4 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST4 | 4444 | MIKE | 1.1.1.41 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST5 | 5555 | SUSIE | 1.1.1.5 | 1/19/2011 01:00:00 | MGMT_SYSTEM_1
Bu yüzden bu ana tabloyu sorgulamak ve yalnızca (LASTUPDATE göre) en son kayıt Ben bu sistemin ilgili en son bilgiler alabilirsiniz bu şekilde almak istiyorum: İşte ile çalışıyorum örnek bir veri kümesidir. Sorun şu ki, bir sistem her bir veritabanında olabilir, ancak elbette asla aynı kesin güncelleme zamanına sahip olmayacaklardır.
Böyle bir şey almak için beklenir:
TEST1 | 1111 | PETER | 1.1.1.11 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST2 | 2222 | GEORGE | 1.1.1.2 | 1/17/2011 01:00:00 | MGMT_SYSTEM_1
TEST3 | 3333 | TOM | 1.1.1.3 | 1/19/2011 01:00:00 | MGMT_SYSTEM_2
TEST4 | 4444 | MIKE | 1.1.1.41 | 1/19/2011 01:00:00 | MGMT_SYSTEM_3
TEST5 | 5555 | SUSIE | 1.1.1.5 | 1/19/2011 01:00:00 | MGMT_SYSTEM_1
Ben MAX işlevini kullanarak denedi, ama bununla birlikte ben yalnızca bir sütun alabilir. Bunu bir alt sorguda kullanamıyorum çünkü bana en son güncellenmiş kaydı verecek benzersiz bir kimlik alanım yok. Sistemlerden biri bir MySQL veritabanıdır ve MySQL'deki MAX işlevi aslında GROUP BY başına bir kayıt döndürmek için ihtiyacım olan şekilde çalışacaktır, ancak SQL Server'da çalışmaz.
MAX ve bir SOL JOIN kullanmam gerektiğini düşünüyorum, ancak şimdiye kadar yaptığım girişimler başarısız oldu.
Yardımınız büyük memnuniyetle karşılanacaktır. Geçen 3-4 saat boyunca beynimi bir çalışma sorgusu almaya çalışıyorum. Bu ana tablo bir SQL Server 2005 sunucusunda bulunur.
Teşekkürler!
Joe, bu harika çalıştı. WITH WITH yan tümcesi hakkında hiç bir şey bilmedim ve daha önce hiç bir zaman da OVER veya PARTITION kullanmamıştım. Kısaca bana bunların neler yaptığını söyleyebilir misin? Onlara baktım, ama şimdi doğru bilgiyi bulacağına eminim. – RyanF
@RyanF: WITH yan tümcesi bir [Ortak Tablo İfadesi veya CTE] tanımlar (http://msdn.microsoft.com/en-us/library/ms190766.aspx). [row_number] (http://msdn.microsoft.com/en-us/library/ms186734.aspx) bir [window function] 'dir (http://www.simple-talk.com/sql/learn-sql-server/işçi ile pencere-fonksiyonları-in-sql sunucu /). Her ikisi de SQL Server 2005'te tanıtılan özelliklerdir. Umarım bu bağlantılar sizi doğru yönde başlatır. –