--ΠΠ° Π²Ρ ΠΎΠ΄Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ°
DECLARE @pays TABLE (
client_id int --ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
,date datetime --ΠΠ°ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΡ ΠΏΠ»Π°ΡΠ΅ΠΆΠ°
,pay_sum decimal(19,2) --Π‘ΡΠΌΠΌΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ°
)
-- ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
INSERT INTO @pays VALUES (1, '2022-01-01T16:11:11', 10)
INSERT INTO @pays VALUES (2, '2022-01-01T16:12:12', 20)
INSERT INTO @pays VALUES (3, '2022-01-01T16:13:13', 30)
INSERT INTO @pays VALUES (5, '2022-02-01T16:14:14', 50)
INSERT INTO @pays VALUES (3, '2022-02-01T16:15:15', 35)
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π·Π°ΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ±ΠΈΡΠ°Π» Π±Ρ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ 2 ΠΏΠΎΠ»Π΅ΠΉ:
- ΡΡΠΌΠΌΠ° ΠΏΠ»Π°ΡΠ΅ΠΆΠ° Π½Π°ΡΠ°ΡΡΠ°ΡΡΠΈΠΌ ΠΈΡΠΎΠ³ΠΎΠΌ
- ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π²ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΡΠΈ ΡΡΠΎΠΌ Π·Π°ΠΏΠΈΡΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°ΡΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎ Π΄Π°ΡΠ΅, ΠΏΠΎΡΠΎΠΌ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
SELECT select_1.client_id, select_1.date, select_1.pay_sum, sm, cnt
FROM
(SELECT a.client_id, a.date, a.pay_sum, SUM(b.pay_sum) sm
FROM @pays a
LEFT OUTER JOIN @pays b
ON a.date >= b.date
GROUP BY a.client_id, a.date, a.pay_sum) select_1
INNER JOIN
(SELECT a.client_id, a.date, a.pay_sum, count(c.client_id) cnt
FROM @pays a
LEFT OUTER JOIN @pays c
on a.client_id = c.client_id
AND a.date > c.date
GROUP BY a.client_id, a.date, a.pay_sum,c.client_id) select_2
ON select_1.client_id = select_2.client_id
AND select_1.date = select_2.date
AND select_1.pay_sum = select_2.pay_sum
ORDER BY select_1.date, select_1.client_id
@sqlhub