Здесь я использую функцию LAST_DAY(), чтобы получить значения последнего дня каждого месяца для каждого клиента в mysql. Я использую версию mysql 8.0. Может ли кто-нибудь помочь мне с этим. Пример таблицы:
образец кода:
select customer_id, LAST_DAY(txn_date) AS months, txn_type, txn_amount
from data_bank.customer_transactions
group by customer_id, months
order by customer_id
Из приведенного выше кода это результаты, которые я получил:
Ожидаемые результаты:
customer_id months txn_type txn_amount
1 2020-01-31 deposit 312
1 2020-03-31 purchase 664
Добавьте max(txn_date)
в список значений.
Найдите время, чтобы прочитать о LAST_DAY()
: dev.mysql.com/doc/refman/8.0/en/…
Я уже прочитал документацию last_day(), если вы видите, что ожидаемые результаты, которые я хочу, отличаются. @форпас
Разница между результатами, которые вы получаете, и вашими ожидаемыми результатами: столбец txn_amount
, который является произвольным, потому что вы не группировали по нему или не агрегировали. Это не имеет ничего общего с LAST_DAY()
Вы предполагаете, что, поскольку вы группируете по последнему дню месяца, он вернет значения последней строки для других столбцов. Это не так. Значения, возвращаемые в одном столбце, не имеют ничего общего с функциями, примененными к другим столбцам.
Прочитай это:
Затем используйте что-то подобное, чтобы вернуть последнюю строку за календарный месяц...
WITH
partitioned AS
(
SELECT
*,
ROW_NUMBER()
OVER (
PARTITION BY customer_id, LAST_DAY(txn_date)
ORDER BY txn_date DESC
)
AS month_row_id
FROM
data_bank.customer_transactions
)
SELECT
*
FROM
partitioned
WHERE
month_row_id = 1
Результаты, которые вы получаете, являются правильными. Вы пропустили столбец
months
в ожидаемых результатах.