質問

一連の列を含むテーブルがあり、そのうちの 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月のこと。

Oracle DB用です。

役に立ちましたか?

解決

SELECT
 COUNT(date)
 , TRUNC(DATE,'MON')
FROM TABLE
GROUP BY TRUNC(DATE,'MON')
HAVING COUNT(DATE) > 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;
3 coloumsは1999から1901-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)

この例は次の場合に役立ちます。

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 を使用して、Date 型を MON-YYYY 形式の 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') 
理想的にはあなたが必要とする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)

これは、MySQLとMSSQLのために働く必要があります:

SELECT MONTH(date), Sum(MONTH(date))
FROM table
GROUP BY date
HAVING Sum(MONTH(date)) > 3

私はあなたが使用しているデータベースを確認していない。

でMySQLのクエリは@THEn

によって提案された方法と同様であろう

SQLサーバー上であなたが他の興味深い可能性を持っています。

この記事を読みます詳細についてます。

あなたは、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データベースを持っていないので、このコードはあるように動作しない場合があります - 。私はこのことをお詫び申し上げます。

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

SELECT SUM(date) FROM table
GROUP BY date where SUM(date) > 3
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top