Найти в Дзене
НЕ СТАЛИН

Вот такой вот запрос писал, ну мне кажется, целую неделю

Вот такой вот запрос писал, ну мне кажется, целую неделю. Ну, не прям 24/7, а как выдавалось времечко. Сегодня вот несколько часов, вчера там часик, позавчера минут 40 или час и так далее. Уже по итогу, сегодня, думал что всё - не получится нифига. Просто я SQL не знаю вообще почти. Впервые конструкции CASE видел и тд. Но по итогу, если я не ошибся в оценке результата, то получилось сделать. И я очень рад) Прям сильно отлегло. Просто SQL, насклько я знаю, позволит нам очень быстро получать резульаты. А тут, вроде бы даже в один запрос всё получилось уместить. То есть, обращений к БД (базе данных) - минимум. Всё за один запрос. Короче, надеюсь, что я не ошибся и не стал слишком рано радоваться. Если кому интересно, то запрос, который я искал почти неделю выглядит так (условные названия таблиц и полей): WITH LastSerialPayout AS ( SELECT p.SerialTimestamp, p.CreditAmount, p.PayeePassportId FROM Payouts p WHERE p.SerialTimestamp = (SELECT MAX(pp.SerialTimestamp) FROM Payouts pp) ) SELEC

Вот такой вот запрос писал, ну мне кажется, целую неделю. Ну, не прям 24/7, а как выдавалось времечко. Сегодня вот несколько часов, вчера там часик, позавчера минут 40 или час и так далее. Уже по итогу, сегодня, думал что всё - не получится нифига. Просто я SQL не знаю вообще почти. Впервые конструкции CASE видел и тд. Но по итогу, если я не ошибся в оценке результата, то получилось сделать. И я очень рад)

Прям сильно отлегло. Просто SQL, насклько я знаю, позволит нам очень быстро получать резульаты. А тут, вроде бы даже в один запрос всё получилось уместить. То есть, обращений к БД (базе данных) - минимум. Всё за один запрос. Короче, надеюсь, что я не ошибся и не стал слишком рано радоваться. Если кому интересно, то запрос, который я искал почти неделю выглядит так (условные названия таблиц и полей):

WITH LastSerialPayout AS (

SELECT p.SerialTimestamp, p.CreditAmount, p.PayeePassportId

FROM Payouts p

WHERE

p.SerialTimestamp = (SELECT MAX(pp.SerialTimestamp) FROM Payouts pp)

)

SELECT pa.PayeePassportId, lsp.SerialTimestamp

, lsp.CreditAmount AS 'LastCredit'

, uI.TelegramId

, uW.FullRegistrationDate

, SUM(CASE WHEN pa.PayeePassportId =lsp.PayeePassportId

THEN pa.CreditAmount ELSE 0 END) AS 'Money'

FROM Payouts pa

JOIN LastSerialPayout lsp ON lsp.PayeePassportId=pa.PayeePassportId

JOIN UsersInterfaces uI ON lsp.PayeePassportId =uI.PassportId

JOIN UsersWallets uW ON lsp.PayeePassportId=uW.PassportId

GROUP BY pa.PayeePassportId