SQL-запрос для поиска результатов без пробела в датах - PullRequest
0 голосов
/ 24 мая 2018

У меня есть таблица с ClaimNumber, NoteCreateDate, NoteType

Я хотел найти утверждения, в которых есть заметки типа «Отзыв отправлен», без пробела в NoteCreateDate

, например.

+-------------+----------------+--------------------+----------+
| ClaimNumber | NoteCreateDate |       Notes        | NoteType |
+-------------+----------------+--------------------+----------+
|       12121 | 12/01/2017     | ReviewSent         | Subject  |
|       12121 | 12/05/2017     | PackagesenttoABC   | Details  |
|       12121 | 12/07/2017     | ReviewSent         | Subject  |
|       10005 | 05/06/2018     | ReviewSent         | Subject  |
|       10005 | 05/07/2018     | ReviewSent         | Subject  |
|       10005 | 05/08/2018     | ReviewSent         | Subject  |
|       10005 | 05/12/2018     | Fieldinvestigation | SIU      |
+-------------+----------------+--------------------+----------+

Ожидается Из этого примера я хотел получить только номер претензии 10005 , так как это утверждение с примечаниями "Отправлено на проверку" без пропусковв дату (последовательные даты).Например, я хотел найти утверждения, для которых создана заметка с фразой «ReviewSent», созданная сегодня, и следующая заметка должна быть такой же, как «Отзыв отправлен», независимо от того, когда он был создан, может быть на следующий день или даже 10 дней.позже .. Заранее спасибо

Мой текущий запрос MS SQL.

    select cm.ClaimNum, a.NoteCreateDate, a.Notes, a.NoteType 
        from CMaster cm
        left join Note a on cm.ClaimNum = a.PARENTREF
        left join NoteType] b on b.ID = a.TYPECODE 
        where Body like '%Review Sent%'

Ответы [ 2 ]

0 голосов
/ 24 мая 2018
    Select * into #tmp
    from
   (
       Select   12121  as ClaimNumber,'12/01/2017' as 
      NoteCreateDate,'ReviewSent' as Notes,'Subject' as NoteType
     union
     Select 12121 , '12/05/2017'     , 'PackagesenttoABC'   , 'Details'  
     union
     Select       12121 , '12/07/2017'     , 'ReviewSent'         , 
     'Subject'  
     union
    Select       10005 , '05/06/2018'     , 'ReviewSent'         , 'Subject'  
   union
     Select       10005 , '05/07/2018'     , 'ReviewSent'         , 
       'Subject'  
   union
   Select       10005 , '05/08/2018'     , 'ReviewSent'         , 'Subject'  
     union
  Select       10005 , '05/12/2018'     , 'Fieldinvestigation' , 'SIU'  

  ) t

/*create another temp table to simplify the query*/
 Select * , ROW_NUMBER() OVER (PARTITION BY ClaimNumber ORDER BY 
 ClaimNumber) 
  as ClaimCounter  into #tmp2 from #tmp

  /** finally get the claimnos that have consecutive NoteCreate Date **/
  SELECT distinct t1.ClaimNumber FROM #tmp2 t1
   inner join #tmp2 t2 on (t1.ClaimCounter = t2.ClaimCounter - 1 and 
   t1.ClaimNumber = t2.ClaimNumber)
  where 
  DATEDIFF(DAY,t1.NoteCreateDate,t2.NoteCreateDate) = 1 
  and
  t1.Notes ='ReviewSent' and t2.Notes ='ReviewSent'
0 голосов
/ 24 мая 2018

Таким образом, если вы хотите найти ClaimNumber (s), куда отправляются заметки ReviewSent назад-2-back, тогда этот запрос получит их

CREATE TABLE T1
    ([ClaimNumber] int, [NoteCreateDate] datetime, [Notes] varchar(18), [NoteType] varchar(7))
;

INSERT INTO T1
    ([ClaimNumber], [NoteCreateDate], [Notes], [NoteType])
VALUES
    (12121, '2017-12-01 00:00:00', 'ReviewSent', 'Subject'),
    (12121, '2017-12-05 00:00:00', 'PackagesenttoABC', 'Details'),
    (12121, '2017-12-07 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-06 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-07 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-08 00:00:00', 'ReviewSent', 'Subject'),
    (10005, '2018-05-12 00:00:00', 'Fieldinvestigation', 'SIU')
;

SELECT DISTINCT X.ClaimNumber
FROM(
    SELECT
         ClaimNumber
        ,NoteCreateDate
        ,Notes
        ,NoteType
        ,LD=LEAD( Notes )OVER(PARTITION BY ClaimNumber ORDER BY NoteCreateDate ASC)
    FROM dbo.T1
) X WHERE LD= 'ReviewSent' AND X.Notes= 'ReviewSent'

DROP TABLE dbo.T1

Результат

ClaimNumber
10005
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...