как получить отдельный список форматированных дат, отсортированных с помощью Mysql - PullRequest
0 голосов
/ 17 октября 2018

Прошло несколько лет с тех пор, как я изучал sql, поэтому у меня возникают проблемы с получением , чтобы получить отдельный список отформатированных дат, отсортированных с использованием Mysql.Мне не нужно показывать свою таблицу, потому что я использую только один столбец datetime

data_vencimento datetime

Если у меня есть 2018-10-29, 2018-10-29, 2018-09-29.Он должен быть отсортирован как

10/2018
09/2018 

, обратите внимание, что повторяющаяся дата «удалена» и был создан отсортированный список отформатированных дат

, вот моя попытка.Он генерирует повторяющиеся результаты.

select distinct(data_vencimento),  date_format( data_vencimento,'%m/%Y' ) as data from (
select data_vencimento from custo_extra_movimento where id_admin
   union
select data_vencimento as data from custo_fixo_movimento where id_admin
   union
select data_vencimento as data from custo_variavel_movimento where id_admin) as tbl order by data_vencimento desc ;

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я думаю, что этого достаточно:

select date_format(data_vencimento, '%m/%Y') as data from custo_extra_movimento where id_admin
union  -- on purpose to remove duplicates
select date_format(data_vencimento, '%m/%Y') as data from custo_fixo_movimento where id_admin
union  -- on purpose to remove duplicates
select date_format(data_vencimento, '%m/%Y') as data from custo_variavel_movimento where id_admin
order by data desc;

Если честно, мне немного непонятна логика заказа, так что это может быть не так.

0 голосов
/ 17 октября 2018
  • Distinct не является функцией;так что вам не нужно использовать скобки с Distinct.
  • Тем не менее, вам нужна Различная комбинация Месяца и Года, поэтому вы можете использовать вместо нее Group By вместе с функциями даты, такими как Month() и Year().
  • Кроме того, в вашем Union запросов, определяющих псевдоним data для второго и третьего запросов Select, не будут служить цели.MySQL будет рассматривать только имя первого столбца запроса Select.

Вместо этого выполните следующие действия:

SELECT 
  YEAR(tbl.data_vencimento) AS year_data, 
  MONTH(tbl.data_vencimento) AS month_data, 
  DATE_FORMAT( MAX(tbl.data_vencimento),'%m/%Y' ) AS data 
FROM (
      select data_vencimento from custo_extra_movimento where id_admin
      union
      select data_vencimento from custo_fixo_movimento where id_admin
      union
      select data_vencimento from custo_variavel_movimento where id_admin
     ) AS tbl 
GROUP BY year_data, month_data 
ORDER BY year_data DESC, month_data DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...