Показать последнюю дату на основе простого условия - PullRequest
0 голосов
/ 09 января 2020

У меня есть таблица PMCContract с уникальным индексом 'ContractID', в котором указывается контракт с клиентами, которые живут в домах. Я хочу знать, какая ContractID с AgreementType = 0 была активной ранее.

У меня уже есть следующий запрос, чтобы показать NEXT ContractID с AgreementType = 0, но теперь я хочу показать LAST ContractID с AgreementType = 0. Что выглядит следующим образом:

WITH PMC
 AS (SELECT PMCCONTRACT.CONTRACTID AS 'ContractId'
            ,PMCCONTRACT.ACCOUNTNUM AS 'Klantnummer'
            ,PMCCONTRACT.[NAME] 
            ,CASE
                WHEN PMCCONTRACT.AGREEMENTTYPE = '0' THEN 'Sociale verhuur'
                WHEN PMCCONTRACT.AGREEMENTTYPE = '3' THEN 'Huurderving'                     
            END AS 'Type huurovereenkomst'              
            ,PMCCONTRACT.STATECODE AS 'Statuscode'
            ,PMCCONTRACT.RENTALOBJECTID AS 'Vastgoedobject ID'
            ,NULLIF(CONVERT(DATE, PMCCONTRACT.VALIDFROM), '') AS 'Geldig vanaf'
            ,NULLIF(CONVERT(DATE, PMCCONTRACT.VALIDTO), '') AS 'Geldig t/m'
            ,CASE 
                WHEN PMCCONTRACT.CONTRACTSTATUS = 1 THEN 'Voorlopig'
                WHEN PMCCONTRACT.CONTRACTSTATUS = 2 THEN 'Actief'
                WHEN PMCCONTRACT.CONTRACTSTATUS = 3 THEN 'Beëindigd'
                WHEN PMCCONTRACT.CONTRACTSTATUS = 4 THEN 'Opgezegd'
                WHEN PMCCONTRACT.CONTRACTSTATUS = 5 THEN 'Geannuleerd'
                WHEN PMCCONTRACT.CONTRACTSTATUS = 6 THEN 'Historisch'
                WHEN PMCCONTRACT.CONTRACTSTATUS = 10 THEN 'Vervallen'
            END AS 'Contract status'
            ,ConcatResult = MIN(CASE
                                 WHEN AGREEMENTTYPE <> '3'
                                   THEN FORMAT(PMCCONTRACT.VALIDFROM, 'yyyy-MM-dd')
                                        + FORMAT(ISNULL(PMCCONTRACT.VALIDTO, '1900-01-01'), 'yyyy-MM-dd')
                                        + CONTRACTID
                               END)
                             OVER (
                               PARTITION BY RENTALOBJECTID
                               ORDER BY PMCCONTRACT.VALIDFROM DESC 
                               ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
     FROM   PMCCONTRACT)
  SELECT *,
       [Vorige ContractId] = SUBSTRING(ConcatResult, 21, 10)
  FROM   PMC
    WHERE PMC.[Vastgoedobject ID] = 1000
    ORDER  BY [Vastgoedobject ID] ASC,
         [Geldig vanaf] ASC

Простое изменение DES C на AS C не работает в ORDER BY PMCCONTRACT.VALIDFROM DESC. Есть предложения?

...