πŸ–₯ SQL Π—Π°Π΄Π°Ρ‡ΠΈ.



--На Π²Ρ…ΠΎΠ΄Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π°

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