Как получить последнюю уплаченную сумму, сгруппированную по городу и году? - PullRequest
0 голосов
/ 20 января 2020

Я хотел бы знать, как получить суммы, выплаченные за последние два месяца, выплаченные за город, заказанный в год.

Если я сгруппирую по году, название города и два месяца:

select year, nameCity, twoMonths, payment
From t
group by year, nameCity, twoMonths

У меня было бы что-то вроде этого:

2018 :  city1 :  2   200
                 4   300
                 6   400

        city2 :  2   250
                 4   100


2019 :  city1 :  1   100
                 2   200
                 3   500

        city2 :  2   750
                 4   180
                 6   220    

Но вывод, который я хочу, выглядит примерно так:

2018    city1   6   400 
        city2   4   100

2019   city1    3   500 
       city2    6   220 

Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вы можете использовать подзапрос, чтобы найти наибольшее значение twoMonths для каждого года и города и присоединение к нему:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT year, nameCity, MAX(twoMonths) AS maxTwoMonths
    FROM yourTable
    GROUP BY year, nameCity
) t2
    ON t1.year = t2.year AND
       t1.nameCity = t2.nameCity AND
       t1.twoMonths = t2.maxTwoMonths

Если ваша версия SQL поддерживает ROW_NUMBER, тогда он может предоставить альтернативу:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY year, nameCity
                                 ORDER BY twoMonths DESC) rn
    FROM yourTable
)

SELECT year, nameCity, twoMonths, payment
FROM cte
WHERE rn = 1;
0 голосов
/ 20 января 2020
SELECT year,nameCity,MAX(twoMonths),MAX(payment)
GROUP BY year,nameCity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...