Postgresql db hakkında user_id, item_id, başarılı (bool) ve created_at sütunları içeren bir puan tablosum var.SQL sayımı ve koşullu gruplandırma
Her kullanıcı ve her öğe için başarılı öğelerin sayısını saymak istiyorum (başarılı olduğunda = 't'). Ama sadece son başarısızlıktan sonra başarılı olanı saymak istiyorum.
Aşağıdaki kodu başarılı olmadan denerim.
SELECT COUNT(*), item_id
FROM score
WHERE score.succeeded = 't' AND user_id = XX
GROUP BY score.item_id
HAVING MAX(score.created_at) > score.created_at AND score.succeeded = 'f'
exemple
verileri: (kullanıcı 12)
user_id | item_id | succeeded | created_at
------------------------------------------
12 | 1 | true | 2016-04-01
12 | 1 | false | 2016-04-02
12 | 1 | true | 2016-04-03
12 | 2 | true | 2016-04-01
12 | 2 | true | 2016-04-02
12 | 2 | true | 2016-04-03
12 | 3 | true | 2016-04-01
12 | 3 | true | 2016-04-02
12 | 3 | false | 2016-04-03
Excepted sonucu:
item_id | succeeded_count
-------------------------
1 | 1
2 | 3
3 | 0
Örnek tablo verilerini ve beklenen sonucu ekler misiniz? – jarlh
Bir örnek ekliyorum. – skyporter