Функция LAST_DAY в mysql не работает

Здесь я использую функцию 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

Результаты, которые вы получаете, являются правильными. Вы пропустили столбец months в ожидаемых результатах.

forpas 13.04.2023 11:57

Добавьте max(txn_date) в список значений.

markalex 13.04.2023 11:58

Найдите время, чтобы прочитать о LAST_DAY(): dev.mysql.com/doc/refman/8.0/en/…

forpas 13.04.2023 12:02

Я уже прочитал документацию last_day(), если вы видите, что ожидаемые результаты, которые я хочу, отличаются. @форпас

ASD 13.04.2023 12:10

Разница между результатами, которые вы получаете, и вашими ожидаемыми результатами: столбец txn_amount, который является произвольным, потому что вы не группировали по нему или не агрегировали. Это не имеет ничего общего с LAST_DAY()

forpas 13.04.2023 12:15
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
5
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы предполагаете, что, поскольку вы группируете по последнему дню месяца, он вернет значения последней строки для других столбцов. Это не так. Значения, возвращаемые в одном столбце, не имеют ничего общего с функциями, примененными к другим столбцам.

Прочитай это:

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

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

Другие вопросы по теме