簡體   English   中英

從子查詢到主查詢中選擇“最小日期”值

[英]Select Min Date value from subquery to main query

我正在嘗試獲取最小日期值作為主查詢中的一列,其中主查詢和子查詢具有內部聯接,並且最小日期值取決於來自主查詢聯接的3列的分組

我在主查詢Select語句中嘗試了子查詢,但是正如我的研究顯示的那樣,它們僅執行一次。 我嘗試了各種連接方式,但是無法獲得邏輯或語法。 我正在考慮將cte組合使用可能有效,但無法弄清楚(對於那些學習新技巧的老狗來說,對於這些高級查詢而言仍然太新了)

DECLARE

@StartBallDate date = '09-05-2009',
@StartLatDate date = '09-05-2009',
@Male int = 1,
@Female int = 4

SELECT T.*, E.StylID, C.PtsFirstRec

FROM dbo.tblPtsPerCompHistory AS T 
        INNER JOIN 
        (
        SELECT Min(Comp_Date) PtsFirstRec, Competition_Idx
        FROM tblCompetitions 
        GROUP BY Comp_Date, Competition_Idx
        ) C ON C.Competition_Idx = T.PtsCompID

        INNER JOIN tblEvtStructure AS E ON E.EvtStruct_Idx = T.PtsStructID

        WHERE E.SectnID Not Between 9 And 10 And (T.PtsMale = @Male Or T.PtsFemale = @Female And E.StylID = 1 And PtsFirstRec >= @StartBallDate) Or (T.PtsMale = @Male Or T.PtsFemale = @Female And E.StylID = 2 And PtsFirstRec >= @StartLatDate)

到目前為止,這給了我每一行的Comp_Date。 我需要達到的目的是可以在以后的程序中使用其他地方的數據

T.PtsMale      T.PtsFemale      C.Comp_Date      E.StylID      PtsFirstRec
1               4                2009-05-05       1            2009-05-05
1               4                2009-05-05       2            2009-05-05
1               4                2010-03-16       1            2009-05-05
1               202              2015-03-25       1            2015-03-25
1               4                2015-03-25       2            2009-05-05
1               202              2016-07-17       1            2015-03-25

因此,我擁有所有行,其中Ptsmale或PtsFemale但是最小日期值PtsFirstRec是配對的最早日期,也由E.StylID分組

這是另一個窗口函數:

DECLARE

@StartBallDate date = '09-05-2009',
@StartLatDate date = '09-05-2009',
@Male int = 1,
@Female int = 4

SELECT T.*, E.StylID, MIN(C.PtsFirstRec) OVER (PARTITION BY T.PtsMale      T.PtsFemale, E.StylID ORDER BY C.Comp_Date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) [NewValue]

FROM dbo.tblPtsPerCompHistory AS T 
        INNER JOIN 
        (
        SELECT Min(Comp_Date) PtsFirstRec, Competition_Idx
        FROM tblCompetitions 
        GROUP BY Comp_Date, Competition_Idx
        ) C ON C.Competition_Idx = T.PtsCompID

        INNER JOIN tblEvtStructure AS E ON E.EvtStruct_Idx = T.PtsStructID

        WHERE E.SectnID Not Between 9 And 10 And (T.PtsMale = @Male Or T.PtsFemale = @Female And E.StylID = 1 And PtsFirstRec >= @StartBallDate) Or (T.PtsMale = @Male Or T.PtsFemale = @Female And E.StylID = 2 And PtsFirstRec >= @StartLatDate)

如果您包含測試數據,我們將能夠確保代碼確實可以正常工作。 但是應該遵循這些原則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM