Макс на дату создания - PullRequest
0 голосов
/ 11 мая 2018

У меня есть эта процедура, которая возвращает три записи, и мне нужно, чтобы она возвращала только строку с максимальной датой.Я создал функцию для передачи значений через запятую.Он возвращает несколько записей для передаваемых значений.Мне нужно, чтобы вернуть только запись с максимальной датой.Я думаю, что упустил что-то простое.Заранее спасибо

    SELECT DISTINCT 
         ZITMTSICOD6.LNGDES_0 as variety
        ,STOLOT.YCROPYR_0 as crop_year
        ,STOLOT.LOT_0 as lot_number
        ,ZITMTSICOD2.LNGDES_0 AS product_name
        ,ISNULL([UV_Alpha], 'NA') as uv_alpha
        ,ISNULL([UV_Beta], 'NA') as uv_beta
        ,ISNULL([HSI], 'NA') as hsi
        ,ISNULL(Moisture, 'NA') as moisture
        ,ISNULL(Oil_by_Dist,'NA') as oil_by_dist
        ,ISNULL([HPLC Alpha],'NA') as hplc_alpha
        ,ISNULL([HPLC Beta],'NA') as hplc_beta
        ,ISNULL([HPLC Cohumulone],'NA') as hplc_cohumulone
        ,ISNULL([HPLC Colupulone],'NA') as hplc_colupulone
        ,ISNULL([Mebak Alpha 7.5],'NA') as mebak_alpha_7_5
        ,ISNULL([LCV Alpha 7.4],'NA') as lcv_alpha_7_4
        ,ISNULL(Oil_B_Pinene,'NA') as oil_b_pinene
        ,ISNULL(Oil_Myrcene,'NA') as oil_myrcene
        ,ISNULL(Oil_Linalool,'NA') as oil_linalool
        ,ISNULL(Oil_Caryophyllene,'NA') as oil_caryophyllene
        ,ISNULL(Oil_Farnesene,'NA') as oil_farnesene
        ,ISNULL(Oil_Humulene,'NA') as oil_humulene
        ,ISNULL(Oil_Geraniol,'NA') as oil_geraniol
        ,STOQLYH.CREDAT_0 as created_at

    FROM
    LIVE.STOLOT 
        left outer join
    LIVE.STOQLYD on STOLOT.LOT_0 = STOQLYD.LOT_0 and STOLOT.SLO_0 = 
    STOQLYD.SLO_0 and STOQLYD.ITMREF_0 = STOLOT.ITMREF_0
        left outer join
    LIVE.STOQLYH on STOQLYH.VCRNUM_0 = STOQLYD.VCRNUM_0 and STOQLYH.ITMREF_0 
   = STOQLYD.ITMREF_0
        left outer join
    LIVE.ITMMASTER on STOLOT.ITMREF_0 = ITMMASTER.ITMREF_0
        left outer join
    LIVE.ZITMTSICOD6 on ITMMASTER.TSICOD_6 = ZITMTSICOD6.ID_0
        left outer join
    LIVE.ZITMTSICOD2 on ITMMASTER.TSICOD_2 = ZITMTSICOD2.ID_0
        left outer join

    (

    SELECT 
        QLYCTLDEM_0,
        QLYCRDASW.VCRLIN_0,
        ITMREF_0,
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'UVALP110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'UV_Alpha',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'UVBET110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'UV_Beta',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'UVHSI110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'HSI',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'OVMOI110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Moisture',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'DIOIL110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_by_Dist',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'HPALP110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'HPLC Alpha',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'HPBET110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'HPLC Beta',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'HPCOH110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'HPLC Cohumulone',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'HPCOL110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'HPLC Colupulone',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'LCALP110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Mebak Alpha 7.5',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'LCALP310' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'LCV Alpha 7.4',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCBPI110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_B_Pinene',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCMYR110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_Myrcene',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCLIN110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_Linalool',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCCAR110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_Caryophyllene',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCFAR110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_Farnesene',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCHUM110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_Humulene',
        MAX(CASE WHEN QLYCRDASW.QSTNUM_0 = 'GCGEL110' THEN QLYCRDASW.ASW_0 
 ELSE NULL END) AS 'Oil_Geraniol'
    FROM 
        LIVE.QLYCRDASW 
 GROUP BY QLYCTLDEM_0, QLYCRDASW.VCRLIN_0, ITMREF_0


    ) AS QLYCRDASW 
    ON (STOQLYD.VCRNUM_0 = QLYCRDASW.QLYCTLDEM_0) AND (STOQLYD.VCRLIN_0 = 
   QLYCRDASW.VCRLIN_0) AND (STOQLYD.ITMREF_0 = QLYCRDASW.ITMREF_0)
    WHERE STOLOT.LOT_0 In( 
    SELECT Item 
       --FROM dbo.SplitString('17-OR277-001,PL1-YKUCTZ0012,DZJ25168',','))
        FROM dbo.SplitString('PL1-YKUCTZ0012',','))

       and (ISNUMERIC(UV_Alpha) = 1 or ISNUMERIC(UV_Beta) = 1 or 
 ISNUMERIC(HSI) = 1 or ISNUMERIC(Moisture) = 1 and ISNUMERIC(Oil_by_Dist) = 1 
 or ISNUMERIC([HPLC Alpha]) = 1
        or ISNUMERIC([HPLC Beta]) = 1 or ISNUMERIC([HPLC Cohumulone]) = 1 or 
ISNUMERIC([HPLC Colupulone]) = 1 or ISNUMERIC([Mebak Alpha 7.5]) = 1 or 
ISNUMERIC([LCV Alpha 7.4]) = 1
        or ISNUMERIC(Oil_B_Pinene) = 1  or ISNUMERIC(Oil_Myrcene) = 1 or 
ISNUMERIC(Oil_Linalool) = 1 or ISNUMERIC(Oil_Caryophyllene) = 1 or 
ISNUMERIC(Oil_Farnesene) = 1 or ISNUMERIC(Oil_Humulene) = 1
        or ISNUMERIC(Oil_Geraniol) = 1)

Заранее спасибо

1 Ответ

0 голосов
/ 11 мая 2018

Вы пытались использовать форму RANK, возможно DENSE_RANK?Вот хороший сайт, чтобы объяснить их.Вы бы добавили это в запрос и обернули все это в другой запрос, а затем добавили WHERE RankedColumn = 1. Имеет смысл?

https://www.c -sharpcorner.com / article / rank-densityrank-и-RowNumber-функции-в-SQL-сервер /

...