SQL Server 2016 kullanıyorum ve tükettiğim veriler aşağıdaki forma sahip.
CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1));
INSERT INTO #tab VALUES
('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL),
('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL);
SELECT *
FROM #tab;
Sütunlar üzerinde son boş olmayan değerleri elde etmek val1
ve val2
tarafından gruplandırılmış cat
ve tarafından sipariş etmek istiyorum t
. Aradığım sonuç
cat val1 val2 A 1 P B 10 C
Ben geldiğimde en son sipariş edilen null olmayan değere ihtiyacım olduğundan işe yaramayacakken LAST_VALUE
görmezden geliyor ORDER BY
.
SELECT DISTINCT
cat,
LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val1,
LAST_VALUE(val2) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val2
FROM #tab
cat val1 val2 A NULL NULL B 10 NULL
Gerçek tabloda, cat
son boş olmayan değeri seçmek için daha fazla sütun (tarih ve dize sütunları) ve daha fazla val sütunu (tarih, dize ve sayı sütunları) bulunur.
Bu seçimin nasıl yapılacağı hakkında herhangi bir fikir.
t
değerler tekrarlanıyor. İyi davranılmış bir veri değildir.
PARTITION BY cat ORDER BY t, id
Örneğin. Aksi takdirde, aynı sorgu (herhangi bir sorgu) ayrı yürütmelerde size farklı sonuçlar verebilir. Tablodaki sütunlar yalnızca gösterdiğiniz sütunlarsa, ancak nasıl belirli bir sıraya sahip olabileceğimizi görmüyorum!
cat
byt
.