1

次のOracleデータベーステーブルUSERSがあります

ここに画像の説明を入力

各ステータスのユーザーステータスの開始日時と終了日時を表示する必要があります。

上記の例から、STEVE BALE is LOGGED_OUT from 01/08/2013 12:00:00 AM to 01/08/2013 5:04:24.736437 AM のように表示する必要があります

2013 年 1 月 8 日 5:04:24.736437 AM から 2013 年 1 月 8 日 6:04:24.736437 AM まで使用不可、

および 2013 年 1 月 8 日 6:04:24.736437 AM から 2013 年 1 月 8 日 7:31:08.591801 AM まで利用可能...

同様に、特定の日の最後のレコードの新しいステータスについて、userR STEVE BALE は、2013 年 1 月 8 日 11:30:50.724405 AM から 2013 年 1 月 8 日 11:59:59 PM まで LOGGED_OUT です。

お時間をいただきありがとうございます。

4

2 に答える 2

3

lead()オラクルには機能があるため、これは実際には非常に簡単です。何かのようなもの:

select t.*,
       lead(status_change_date) over (partition by user_name order by status_change_date) as end_status_time
from t

文字列の場合、次のようなことができます。

select (t.user_name||' is '||t.new_status||' from '||
        to_char(status_change_date, 'mm/dd/yyyy hh:mi')+' to '||
        to_char(lead(status_change_date) over (partition by user_name order by status_change_date),
                'mm/dd/yyyy hh:mi')
       ) as thestring
from t 
于 2013-01-09T17:04:41.980 に答える
0

私があなたを正しく理解した場合の例を次に示します。「to」部分で日付/時刻列を使用します。

Select 'STEVE BALE is LOGGED_OUT from: '||to_char(trunc(Sysdate), 'mm/dd/yyyy hh:mi:ss AM')||' to '||to_char((trunc(sysdate)+5/24)+04/1440, 'mm/dd/yyyy hh:mi:ss AM') "in_out"
From dual;

SQL> STEVE BALE is LOGGED_OUT from: 01/09/2013 12:00:00 AM to 01/09/2013 05:04:00 AM

前/次の行から値を取得するには、Gordon の提案に従って Lag/Lead を使用します。

于 2013-01-09T18:32:54.447 に答える