8

列のセットを含むテーブルがあります。そのうちの1つは日付列です。

その列の値が同じ月を参照している回数を数える必要があります。そして、1か月間、そのカウントの合計が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

11月の場合。

OracleDB用です。

4

9 に答える 9

7
SELECT
 COUNT(date)
 , TRUNC(DATE,'MON')
FROM TABLE
GROUP BY TRUNC(DATE,'MON')
HAVING COUNT(DATE) > 3
于 2010-03-03T23:27:38.593 に答える
3
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;
于 2010-03-04T02:09:59.040 に答える
1

したがって、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)
于 2010-03-03T23:32:13.687 に答える
1

理想的には、Month(integer)とlimit(integer)という2つの必要な基準を受け入れるストアドプロシージャを作成する必要があります。

以下を実行するパラメータ化されたプロシージャで

 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)
于 2010-03-03T23:39:08.180 に答える
1

この例は役に立ちます:

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

2009年11月は、3つ以上のイベントが発生した唯一の月であることがわかります。

元の質問に戻ります。これは、1か月の場合、合計が3を超える場合に返されます。次のSQL集計が機能します。

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

または、to_charを使用して、次のように日付型をMON-YYYY画像の文字に変換します。

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') 
于 2010-03-04T14:59:43.703 に答える
0

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データベースが手元にないため、このコードがそのまま機能しない可能性があります。申し訳ありません。

于 2010-03-04T00:01:36.530 に答える
0

これはmysqlとmssqlで機能するはずです。

SELECT MONTH(date), Sum(MONTH(date))
FROM table
GROUP BY date
HAVING Sum(MONTH(date)) > 3
于 2010-03-03T23:26:46.580 に答える
0

使用しているデータベースがわかりません。

MySQLクエリでは、によって提案された方法に似ています@THEn

SQLサーバーでは、他にも興味深い可能性があります。

詳細については、この記事をお読みください。

于 2010-03-03T23:38:59.163 に答える
-2

間違っている可能性がありますが、推測です:

SELECT SUM(date) FROM table
GROUP BY date where SUM(date) > 3
于 2010-03-03T23:21:34.190 に答える