Как подсчитать названия разных месяцев в наборе значений дат? - PullRequest
0 голосов
/ 03 июня 2018

У меня есть таблица «Данные», и там есть два поля: Date_date1, а также Data_date2, и я хочу посчитать его на основе месяца.это моя база данных

Table: Data
Data_date1  Data_date2   
---------------------------------
2019-07-23  2019-01-23
2019-08-23  2019-01-24
2019-08-24  2019-02-23
2019-09-21  2019-07-23
2019-09-22  2019-09-22
2019-09-23  2019-09-23

и я хочу получить результаты, подобные этому

Month   Count_Date1     Count_Date2
Jan     0               2
Feb     0               1
July    1               1
Aug     2               0
Sep     3               9

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Попробуйте это:

SELECT MONTH(data_date) m
  ,SUM(d=1) d1
  ,SUM(d=2) d2 
FROM
  (SELECT 1 d, data_date1 data_date FROM my_table
   UNION
   SELECT 2, data_date2 FROM my_table
  ) x
GROUP BY m

Вот некоторые настройки, с помощью которых можно протестировать этот запрос и получить желаемые результаты:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(data_date1  DATE NOT NULL
,data_date2  DATE NOT NULL
);

INSERT INTO my_table VALUES
('2019-07-23','2019-01-23'),
('2019-08-23','2019-01-24'),
('2019-08-24','2019-02-23'),
('2019-09-21','2019-07-23'),
('2019-09-22','2019-09-22'),
('2019-09-23','2019-09-23');
0 голосов
/ 03 июня 2018

Вы можете использовать union all и group by:

select month(dte), sum(cnt1), sum(cnt2)
from ((select data_date1 as dte, 1 as cnt1, 0 as cnt2
       from t
      ) union all
      (select data_date2, 0, 1
       from t
      )
     ) dd
group by month(dte);

Показывает номер месяца, а не название месяца.

Если вы хотите указать название месяца, вы должны сделать:

select monthname(dte), sum(cnt1), sum(cnt2)
from ((select data_date1 as dte, 1 as cnt1, 0 as cnt2
       from t
      ) union all
      (select data_date2, 0, 1
       from t
      )
     ) dd
group by monthname(dte), month(dte)
order by month(dte);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...