2016-02-17 2 views
0

не могли бы вы помочь мне получить решение для моей проблемы. Я использовал базу данных sybase.Как получить начальную/конечную дату с одного столбца даты из запроса sql

У меня есть два стола trans_status, trans_ref

trans_status: -

| Corre_ID | Pro_type |  Desc |    Datetime | 
|----------|----------|-----------|-------------------------| 
| ABC_01 | Books | Started | 17/02/2016 00:17:18.963 | 
| ABC_01 | Books | Inprocess | 17/02/2016 00:18:18.963 | 
| ABC_01 | Books | Finished | 17/02/2016 00:19:18.963 | 
| ABC_02 |  XXXX | Started | 16/02/2016 00:17:18.963 | 
| ABC_02 |  XXXX | Inprocess | 16/02/2016 00:18:18.963 | 
| ABC_02 |  XXXX | Finished | 16/02/2016 00:19:18.963 | 
| ABC_03 |  yyyy | Started | 15/02/2016 00:17:18.963 | 
| ABC_03 |  yyyy | Inprocess | 15/02/2016 00:18:18.963 | 
| ABC_03 |  yyyy | Finished | 15/02/2016 00:19:18.963 | 
| ABC_04 |  zzzz | Started | 14/02/2016 00:19:18.963 | 

trans_ref: -

| Payment_ID | Corre_ID | 
|------------|----------| 
|  1111 | ABC_01 | 
|  2222 | ABC_02 | 
|  3333 | ABC_03 | 
|  4444 | ABC_04 | 

Желаемая Выход: -

Corre_ID-----Payment_ID-----StartDate-----EndDate-----Response Time in Hours 
ABC_01-----1111-----17/02/2016 00:17:18.963-----17/02/2016 00:19:18.963-----1 
ABC_02-----2222-----16/02/2016 00:17:18.963-----16/02/2016 00:19:18.963-----1 
ABC_03-----3333-----15/02/2016 00:17:18.963-----15/02/2016 00:19:18.963-----1 
ABC_04-----4444-----14/02/2016 00:19:18.963-----EMPTY-----EMPTY 

могли бы вы помочь меня для создания sql-запроса, пожалуйста. Здесь мое описание не было стандартным все время.

+0

Вы должны объяснить логику того, насколько успешным является результат желания, мы можем попытаться угадать, но это пустая трата нашего времени. Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) –

+0

HI Juan, Спасибо, что ответили на мой вопрос. Я уже много пробовал. но все еще не получая проектной продукции. Если вы можете помочь мне с технической экспертизой, это будет большой помощью. –

+0

Как я уже сказал, я не могу помочь, пока вы не объясните, какую логику вам нужно применить, чтобы получить этот результат, и прочитайте ссылку, которую я предоставляю, чтобы вы узнали, как улучшить вопросы –

ответ

0

Так что вы хотите, это:

SELECT t.Corre_ID,s.Payment_ID, 
     max(case when t.Desc = 'Started' then t.Datetime end) as startDate, 
     max(case when t.Desc = 'Finished' then t.Datetime end) as startDate, 
     TIMESTAMPDIFF(HOUR,max(case when t.Desc = 'Started' then t.Datetime end), 
        max(case when t.Desc = 'Inprocess' then t.Datetime end)) as response 
FROM trans_status t 
INNER JOIN trans_ref s ON (t.Corre_ID = s.Corre_ID) 
GROUP BY t.Corre_ID,s.Payment_ID 

Если я правильно понял, то время отклика разница между start_date и InProcess даты

+0

спасибо sagi .. он отлично работает .. спасибо большое за вашу помощь .. –

0

Чтобы получить дату начала и окончания, вы должны дважды войти в таблицу trans_status. Поскольку дата окончания может отсутствовать, вы должны сделать второе соединение левым соединением. Попробуйте следующий запрос:

SELECT 
    r.Corre_ID, 
    Payment_ID, 
    s_start.Datetime AS StartDate, 
    s_end.Datetime AS EndDate, 
    TIMEDIFF(s_end.Datetime, s_start.Datetime) AS 'Response Time in Hours' 
FROM 
    trans_ref r JOIN trans_status s_start ON (r.Corre_ID = s_start.Corre_ID AND s_start.Desc = 'Started') 
       LEFT JOIN trans_status s_end ON (r.Corre_ID = s_end.Corre_ID AND s_end.Desc = 'Finished') 

Если процесс не закончен, поля EndDate и «Время отклика в часах» будет NULL.

0
SELECT sd.Corre_ID, sd.Payment_ID, sd.Datetime StartDate, ed.Datetime EndDate, 
    TIMESTAMPDIFF(HOUR, ed.EndDate, sd.StartDate) `Response Time in Hours` 
FROM 
    (SELECT ts.Corre_ID, tr.Payment_ID, ts.Datetime 
    FROM trans_status ts 
    JOIN trans_ref tr on ts.Corre_ID = tr.Corre_ID 
    WHERE ts.Desc = 'Started' 
    GROUP BY ts.Corre_ID) sd 
    LEFT JOIN 
    (SELECT ts.Corre_ID, tr.Payment_ID, ts.Datetime 
    FROM trans_status ts 
    JOIN trans_ref tr on ts.Corre_ID = tr.Corre_ID 
    WHERE ts.Desc = 'Finished' 
    GROUP BY ts.Corre_ID) ed 
    on sd.Corre_ID = ed.Corre_ID 

PS. Это синтаксис MySQL, не уверен, что он аналогичен для Sybase.