Счет SQL для столбца даты

У меня есть таблица, что containts ряд столбцов одна из нее является столбцом Date.

Я должен рассчитать, сколько случаев значений того столбца относится к тому же месяцу. И возвратитесь, если в течение одного месяца, то количество суммирует больше чем 3.

Например:

____________________
| DATE   |  ....    |
---------------------
1998-09-02
1998-09-03
1998-10-03
1998-10-04

Это не должно возвращать значение. Поскольку это не имеет необходимого количества повторений.

Но это это делает:

____________________
| DATE   |  ....    |
---------------------
1998-09-02
1998-09-03
1998-09-12
1998-09-14
1998-10-02
1998-11-21

В течение ноябрьского месяца.

Для DB Oracle.

8
задан Sheldon 4 March 2010 в 00:35
поделиться

9 ответов

SELECT
 COUNT(date)
 , TRUNC(DATE,'MON')
FROM TABLE
GROUP BY TRUNC(DATE,'MON')
HAVING COUNT(DATE) > 3
7
ответ дан 5 December 2019 в 15:22
поделиться

Значит, если 3 колонки содержат 1999-01-xx, вы хотите, чтобы это было извлечено?

SELECT YEAR(date), MONTH(date) 
FROM table GROUP BY YEAR(date), MONTH(date) 
HAVING COUNT(*) > 3

Если вам нужны все строки, содержащие верхний результат, это должно выглядеть примерно так

SELECT * FROM table 
INNER JOIN (
   SELECT YEAR(date) as y, MONTH(date) as m 
   FROM table GROUP BY YEAR(date), MONTH(date) 
   HAVING COUNT(*) > 3
) as virtualTable 
ON virtualTable.y = YEAR(date) AND virtualTable.m = MONTH(date)
1
ответ дан 5 December 2019 в 15:22
поделиться

Этот пример поможет:

create table d1
( event_date date, event_description varchar2(100));

insert into d1 values (sysdate,'Phone Call');
insert into d1 values (sysdate,'Letter');
insert into d1 values (sysdate-50,'Interview');
insert into d1 values (sysdate-50,'Dinner with parents');
insert into d1 values (sysdate-100,'Birthday');
insert into d1 values (sysdate-100,'Holiday');
insert into d1 values (sysdate-100,'Interview');
insert into d1 values (sysdate-100,'Phone Call');

commit;

select * from d1;

EVENT_DATE                EVENT_DESCRIPTION                                                                                    
------------------------- ----------------------------------------------- 
04-MAR-10 14.47.58        Phone Call                                                                                           
04-MAR-10 14.47.58        Letter                                                                                               
13-JAN-10 14.47.58        Interview                                                                                            
13-JAN-10 14.47.58        Dinner with parents                                                                                  
24-NOV-09 14.47.58        Birthday                                                                                             
24-NOV-09 14.47.58        Holiday                                                                                              
24-NOV-09 14.47.58        Interview                                                                                            
24-NOV-09 14.47.58        Phone Call                                                                                           
8 rows selected

Вы можете видеть, что ноябрь-09 - единственный месяц, в котором больше трех событий.

Возвращаясь к вашему первоначальному вопросу, который был И верните, если в течение одного месяца сумма этого счета превышает 3 . Следующий агрегат SQL будет работать.

select trunc(event_date,'MONTH'),count('x') from d1 
having count('x') > 3 group by trunc(event_date,'MONTH') 

В качестве альтернативы можно использовать to_char для преобразования типа Date в Char с изображением МЕСЯЦ-ГГГГ следующим образом:

select to_char(trunc(event_date,'MONTH'),'MON-YYYY') month,
    count('x') no_of_occurances from d1 having count('x') > 3 group trunc(event_date,'MONTH') 
1
ответ дан 5 December 2019 в 15:22
поделиться

Это должно работать для mysql и mssql:

SELECT MONTH(date), Sum(MONTH(date))
FROM table
GROUP BY date
HAVING Sum(MONTH(date)) > 3
0
ответ дан 5 December 2019 в 15:22
поделиться

Я не уверен, какую базу данных вы используете.

В MySQL запрос будет аналогичен методу, предложенному @THEn

На сервере SQL у вас есть другие интересные возможности.

Подробнее читайте в статье .

0
ответ дан 5 December 2019 в 15:22
поделиться

Вы можете использовать метод Oracle EXTRACT:

select theMonth, sum(monthCount)
from (
  select 
    extract(MONTH FROM t.theDateColumn) as theMonth,
    1 as monthCount
  )
group by theMonth
having sum(monthCount) >= 3

В настоящий момент у меня нет базы данных Oracle, поэтому этот код может не работать как есть - Прошу прощения за это.

0
ответ дан 5 December 2019 в 15:22
поделиться

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

В параметризованной процедуре, которая выполняет следующее

 SELECT MONTH(Date) AS TheMonth, COUNT(MONTH(Date)) AS TheMonthCount
    FROM MyTable
    GROUP BY MONTH(Date)
    HAVING (COUNT(MONTH(Date)) > @limit) AND (MONTH(Date) = @month)

Чтобы также вывести соответствующий месяц, вы можете использовать следующие

SELECT CAST(YEAR(Date) AS NVARCHAR) + '.' + 
       CAST(MONTH(Date) AS NVARCHAR) AS 'The  ', 
MONTH(Date ) AS TheMonth, COUNT(MONTH(Date)) AS TheMonthCount
    FROM Audit_Entry
    GROUP BY MONTH(Date), 
         CAST(YEAR(Date) AS NVARCHAR) + '.' +            
         CAST(MONTH(Date) AS NVARCHAR)
    HAVING (COUNT(MONTH(Date)) > @limit) AND (MONTH(Date) = @month)
1
ответ дан 5 December 2019 в 15:22
поделиться
create table x (date_col date);

insert into x values (date '1998-09-02');
insert into x values (date '1998-09-03');
insert into x values (date '1998-09-12');
insert into x values (date '1998-09-14');
insert into x values (date '1998-10-02');
insert into x values (date '1998-11-21');

SELECT TRUNC(date_col,'MM'), count(*)
FROM x
GROUP BY TRUNC(date_col,'MM')
HAVING count(*) > 3;
3
ответ дан 5 December 2019 в 15:22
поделиться

Могу ошибаться, но предположение:

SELECT SUM(date) FROM table
GROUP BY date where SUM(date) > 3
-2
ответ дан 5 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: