Sql server 内部联接select语句以按日期查找下一条记录

Sql server 内部联接select语句以按日期查找下一条记录,sql-server,stored-procedures,inner-join,Sql Server,Stored Procedures,Inner Join,我一直在努力解决如何将一个select语句内部联接到另一个select语句,以便按日期顺序返回特定项的下一个值。我有许多表格,用于确定比赛、比赛和参赛者,以及确定赢得第一场比赛的参与者的初始选择。每场比赛包含多场比赛,每场比赛包含多个参赛者。在本例中,我使用参与者唯一标识符HorsePK来标识需要返回的记录。然后我试图实现的是确定他们在下一场比赛和之后的比赛中的成绩,而不是anu随后可能发生的比赛。也会有参与者仅完成一场或两场比赛的情况,因此应排除这些记录 最初的select语句是: Selec

我一直在努力解决如何将一个select语句内部联接到另一个select语句,以便按日期顺序返回特定项的下一个值。我有许多表格,用于确定比赛、比赛和参赛者,以及确定赢得第一场比赛的参与者的初始选择。每场比赛包含多场比赛,每场比赛包含多个参赛者。在本例中,我使用参与者唯一标识符HorsePK来标识需要返回的记录。然后我试图实现的是确定他们在下一场比赛和之后的比赛中的成绩,而不是anu随后可能发生的比赛。也会有参与者仅完成一场或两场比赛的情况,因此应排除这些记录

最初的select语句是:

Select RaceDate, HorsePK, HorseName, CareerRuns, FinishResult As ResultA

FROM [Punting].[dbo].[tblRace] 
        Inner Join tblRaceEntrant On tblRace.RacePK = tblRaceEntrant.RaceFK
        Inner Join tblRaceMeeting On tblRace.RaceMeetingFK = tblRaceMeeting.RaceMeetingPK
        Inner Join tblHorse On tblRaceEntrant.HorseFK = tblHorse.HorsePK
        Where CareerRuns < 1 And FinishResult = 1
显然,我对SQL server不是特别精通,但我相信这是一种比使用我知道但不精通的游标更好的返回这些结果的方法。我还有别的办法吗

这些是使用马ID的表格的编辑版本,而不是为每个涉及的表格粘贴DDL,因为它是相当多的数据:

CREATE TABLE [dbo].[tblHorse](
    [HorsePK] [int] IDENTITY(1,1) NOT NULL,
    [HorseName] [nvarchar](250) NOT NULL,
    [SireFK] [int] NULL,
    [DamFK] [int] NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[tblRaceEntrant](
    [RaceEntrantPK] [int] IDENTITY(1,1) NOT NULL,
    [RaceFK] [int] NOT NULL,
    [EntrantNumber] [int] NOT NULL,
    [HorseFK] [int] NOT NULL,
    [Age] [int] NULL,
    [Gender] [varchar](5) NULL,
    [FinishResult] [int] NULL
) ON [PRIMARY]
tblHorse的示例数据如下所示:

HorsePK HorseName   SireFK  DamFK
77447   Scorpius    739 15383
84803   One Job 777 633
84815   Hooroo Lads 132 9797
84841   Ingear  766 21204
84884   Platinum Euros  143 11723
84889   Cryptic Wonder  211 17758
84912   Tricky Gal  90  19918
108448  Grey Detective  278 17515
109291  Nostradam Man   1347    6955
109319  Piccadilly Waltz    9   29848
RaceEntrantPK   RaceFK  EntrantNumber   HorseFK Age Gender  FinishResult
67  10635   14  77447   2   C   1
355 27  8   84803   2   F   1
694 66  8   84841   2   F   1
845 82  8   84815   2   G   1
1342    129 3   84884   2   G   1
1841    179 8   84889   2   G   1
2082    203 6   84912   3   M   1
5163    510 7   84841   2   F   3
5236    517 2   84815   2   G   10
8574    871 3   84889   2   G   2
10062   1026    1   84912   3   M   1
27640   2824    3   84912   4   M   2
36037   3673    5   84912   4   M   1
42829   4401    7   84912   4   M   1
49460   5110    1   84912   4   M   2
60466   6290    8   84841   3   F   14
62017   6453    11  77447   3   C   2
67086   6975    18  84841   3   F   8
71604   7450    10  77447   3   C   1
76138   7921    7   84841   3   F   5
77838   8102    1   77447   3   C   4
84153   8761    4   84841   3   F   2
85015   8843    4   77447   3   C   5
114210  11756   6   77447   2   C   7
505957  52335   10  84841   3   F   3
508693  52635   3   84889   3   G   1
511758  52943   15  84841   3   F   1
516101  53391   8   84884   3   G   1
518339  53625   1   84889   3   G   2
521441  53947   12  84841   3   F   3
537301  55557   4   84912   4   M   1
545700  56358   2   84912   4   M   6
561458  59583   11  84912   4   M   3
569822  60358   2   77447   3   G   2
572503  60587   4   84912   4   M   2
575946  60853   9   77447   3   G   8
580109  61296   9   77447   3   G   3
580253  61310   9   84912   4   M   7
587297  61953   6   77447   3   G   5
603412  63355   3   77447   4   G   10
608617  63805   9   84841   4   M   2
615265  64429   4   77447   4   G   2
618260  64741   3   77447   4   G   5
623080  65235   3   84912   5   M   1
625750  65507   3   108448  3   C   1
630404  65993   3   84912   5   M   5
635248  66478   4   109291  3   G   1
635604  66517   7   109319  3   0   1
635652  66522   7   108448  3   C   9
637189  66679   10  84912   5   M   5
638846  66857   5   109291  3   G   10
tblRaceEntrant的示例代码如下所示:

HorsePK HorseName   SireFK  DamFK
77447   Scorpius    739 15383
84803   One Job 777 633
84815   Hooroo Lads 132 9797
84841   Ingear  766 21204
84884   Platinum Euros  143 11723
84889   Cryptic Wonder  211 17758
84912   Tricky Gal  90  19918
108448  Grey Detective  278 17515
109291  Nostradam Man   1347    6955
109319  Piccadilly Waltz    9   29848
RaceEntrantPK   RaceFK  EntrantNumber   HorseFK Age Gender  FinishResult
67  10635   14  77447   2   C   1
355 27  8   84803   2   F   1
694 66  8   84841   2   F   1
845 82  8   84815   2   G   1
1342    129 3   84884   2   G   1
1841    179 8   84889   2   G   1
2082    203 6   84912   3   M   1
5163    510 7   84841   2   F   3
5236    517 2   84815   2   G   10
8574    871 3   84889   2   G   2
10062   1026    1   84912   3   M   1
27640   2824    3   84912   4   M   2
36037   3673    5   84912   4   M   1
42829   4401    7   84912   4   M   1
49460   5110    1   84912   4   M   2
60466   6290    8   84841   3   F   14
62017   6453    11  77447   3   C   2
67086   6975    18  84841   3   F   8
71604   7450    10  77447   3   C   1
76138   7921    7   84841   3   F   5
77838   8102    1   77447   3   C   4
84153   8761    4   84841   3   F   2
85015   8843    4   77447   3   C   5
114210  11756   6   77447   2   C   7
505957  52335   10  84841   3   F   3
508693  52635   3   84889   3   G   1
511758  52943   15  84841   3   F   1
516101  53391   8   84884   3   G   1
518339  53625   1   84889   3   G   2
521441  53947   12  84841   3   F   3
537301  55557   4   84912   4   M   1
545700  56358   2   84912   4   M   6
561458  59583   11  84912   4   M   3
569822  60358   2   77447   3   G   2
572503  60587   4   84912   4   M   2
575946  60853   9   77447   3   G   8
580109  61296   9   77447   3   G   3
580253  61310   9   84912   4   M   7
587297  61953   6   77447   3   G   5
603412  63355   3   77447   4   G   10
608617  63805   9   84841   4   M   2
615265  64429   4   77447   4   G   2
618260  64741   3   77447   4   G   5
623080  65235   3   84912   5   M   1
625750  65507   3   108448  3   C   1
630404  65993   3   84912   5   M   5
635248  66478   4   109291  3   G   1
635604  66517   7   109319  3   0   1
635652  66522   7   108448  3   C   9
637189  66679   10  84912   5   M   5
638846  66857   5   109291  3   G   10

我尝试修改外部选择以选择t.HorsePK,而不是按照建议选择HorsePK,但这并没有解决错误。

在我的示例中,您需要为子查询tx添加别名,然后使用此别名加入。另外,由于您希望在t1.HorsePK上加入,因此需要在子查询中选择它

Select RaceDate, HorsePK, HorseName, CareerRuns, FinishResult As ResultA, ResultB

FROM [Punting].[dbo].[tblRace] t
        Inner Join tblRaceEntrant On t.RacePK = tblRaceEntrant.RaceFK
        Inner Join tblRaceMeeting On t.RaceMeetingFK = tblRaceMeeting.RaceMeetingPK
        Inner Join tblHorse On tblRaceEntrant.HorseFK = tblHorse.HorsePK
        Inner Join (Select Top (1) FinishResult As ResultB, t1.HorsePK /* <-- select anything you need outside of this subquery */
            FROM [Punting].[dbo].[tblRace] t1
                    Inner Join tblRaceEntrant On t1.RacePK = tblRaceEntrant.RaceFK
                    Inner Join tblRaceMeeting On t1.RaceMeetingFK = tblRaceMeeting.RaceMeetingPK
                    Inner Join tblHorse On tblRaceEntrant.HorseFK = tblHorse.HorsePK 
                    Order By RaceDate Desc) tx On t.HorsePK = tx.HorsePK /* <-- Give an alias to you subquery and join on this alias*/
        
        Where CareerRuns < 1 And FinishResult = 1

我认为这一逻辑对我来说是有意义的,但它返回的错误是无效的列名“HorsePK”。对于此字段的每个引用。我将查询分解为一个select语句,以确保返回该字段并且该字段工作正常,因此我假设问题与查询中如何引用该字段有关。它还在内部联接语句“on t.HorsePK=tx.HorsePK”上返回不明确的列名“HorsePK”。有什么想法吗?请您编辑您的问题并附加表的DDL和一些示例数据好吗?含糊不清的列错误可能来自您的外部选择。选择t.HorsePK而不是选择HorsePK。