2016-08-17 16 views
-1

私はテーブルsqlで複数のデータ日付を持っています。すべての日付には、毎月の日付範囲があります。毎月の現在の最終日をにしたいと思います。どうやってするか?。誰でもこれについて知っていますか?例えばDB2の毎月の最終日の取得方法

daterange month    **current last day this month** 

--------------------------------------------------------------- 

2016-01-04     2016-01-22 
2016-01-05     2016-01-22 
2016-01-06     2016-01-22 
2016-01-07     2016-01-22 
2016-01-08     2016-01-22 
2016-01-09     2016-01-22 
2016-01-10     2016-01-22 
2016-01-11     2016-01-22 
2016-01-12     2016-01-22 
2016-01-13     2016-01-22 
2016-01-14     2016-01-22 
.......... 
.......... 
.......... 
2016-01-22     2016-01-22 

2016-02-02     2016-02-25 
2016-02-03     2016-02-25 
2016-02-04     2016-02-25 
2016-02-05     2016-02-25 
2016-02-06     2016-02-25 
.......... 
.......... 
.......... 
2016-02-25     2016-02-25 

2016-03-01     2016-03-23 
2016-03-02     2016-03-23 
2016-03-03     2016-03-23 
2016-03-04     2016-03-23 
2016-03-05     2016-03-23 
2016-03-06     2016-03-23 
.......... 
.......... 
.......... 
2016-03-23     2016-03-23 
+0

「毎月の現在の最終日」とは何かを明確にしてください。 1月22日はどのようにして2016年1月の最終日ですか? –

+0

1月22日はランダムなデータがテーブルに存在します。今月最後の現在の日を取得したいだけです。 –

答えて

0

はこれを試してください。

db2 "select T1.yourColumn as cur_date,    
     T2.yourColumn as last_day 
from yourtable T1,    
     (SELECT yourColumn FROM (SELECT yourColumn, ROW_NUMBER() OVER (PARTITION BY YEAR(yourColumn), MONTH(yourColumn) ORDER BY DAY(yourColumn) DESC) AS rowNum FROM yourtable) WHERE rowNum = 1 
     ) as T2 where MONTH(T1.yourColumn)=MONTH(T2.yourColumn)" 

ex;

[email protected]:/home/db2inst1:>db2 "select * from test" 

DATARANGE 
---------- 
01/04/2016 
01/04/2016 
01/05/2016 
01/06/2016 
01/07/2016 
01/08/2016 
01/09/2016 
01/10/2016 
01/11/2016 
01/12/2016 
01/13/2016 
01/14/2016 
01/22/2016 
02/02/2016 
02/03/2016 
02/04/2016 
02/05/2016 
02/06/2016 
02/25/2016 
03/01/2016 
03/02/2016 
03/03/2016 
03/04/2016 
03/05/2016 
03/06/2016 
03/23/2016 

    26 record(s) selected. 

[email protected]:/home/db2inst1:>db2 "select T1.DATARANGE as date,    
     T2.datarange as last_day 
from test T1,    
     (SELECT datarange FROM (SELECT datarange, ROW_NUMBER() OVER (PARTITION BY YEAR(datarange), MONTH(datarange) ORDER BY DAY(datarange) DESC) AS rowNum FROM test) z WHERE rowNum = 1 
     ) as T2 where MONTH(T1.DATARANGE)=MONTH(T2.datarange)" 

DATE  LAST_DAY 
---------- ---------- 
01/04/2016 01/22/2016 
01/04/2016 01/22/2016 
01/05/2016 01/22/2016 
01/06/2016 01/22/2016 
01/07/2016 01/22/2016 
01/08/2016 01/22/2016 
01/09/2016 01/22/2016 
01/10/2016 01/22/2016 
01/11/2016 01/22/2016 
01/12/2016 01/22/2016 
01/13/2016 01/22/2016 
01/14/2016 01/22/2016 
01/22/2016 01/22/2016 
02/02/2016 02/25/2016 
02/03/2016 02/25/2016 
02/04/2016 02/25/2016 
02/05/2016 02/25/2016 
02/06/2016 02/25/2016 
02/25/2016 02/25/2016 
03/01/2016 03/23/2016 
03/02/2016 03/23/2016 
03/03/2016 03/23/2016 
03/04/2016 03/23/2016 
03/05/2016 03/23/2016 
03/06/2016 03/23/2016 
03/23/2016 03/23/2016 

    26 record(s) selected. 
+0

申し訳ありません。これは私が望むものではありません。私はちょうど毎月先月の現在の日を表示したい。たとえばJanの場合、データは2016-01-22までしか存在しません。だから私は毎月最高の日を計算したい。私のテーブルを再び編集しよう。 –

+0

@AminSCO、私はansを更新した。たぶんこれはあなたを助けることができる –

+0

@AminSCO、これはあなたを助ける? –

関連する問題