gpt4 book ai didi

sql-server - SQL : Recursive search for each row

转载 作者:行者123 更新时间:2023-12-02 16:20:35 24 4
gpt4 key购买 nike

我什至不确定这是否可以仅使用 SQL,但这里是......

我在一个表中有一个足球结果列表,每一行都是一场比赛,包含该比赛的所有数据,即主场(球队)、主场进球、客场进球、客场(球队),我想循环浏览每场比赛,得到主队,查看其最近 6 场比赛,仅显示指定球队在最近 6 场比赛中 50% 或以上进球数达到 2 球或以上的比赛。

到目前为止我已经有了这个,我只是不知道如何将它们拼接在一起......

创建所有比赛的列表,仅返回主队:

SELECT *
FROM [FDATA].[dbo].[Goals]
ORDER BY Date

获取该球队的最后 6 场比赛:(我想对上述查询的每一行执行以下查询)

SELECT TOP 6 *
FROM [FDATA].[dbo].[Goals]
WHERE Home = '[Home] from first query' AND Date <= '[Date] from first query'
ORDER BY Date DESC

然后检查球队在返回的 6 场比赛中 >= 50% 中是否进球 2 个或更多进球,如果为 true,则输出第一个查询中的行。

所以基本上对于数据库中的每一行,我想找到该行(比赛)中主队的最后 6 场比赛,看看他们是否在 50% 或更多的比赛中打入 2 个或更多进球,如果是这样,输出原始行,如果没有,则从结果中省略该行。

可能吗?

最佳答案

假设 SQL Server 2012。未经测试,但我认为这应该有效:

WITH Last6 as (
SELECT
Home, HomeGoals,
ROW_NUMBER() OVER (PARTITION BY Home ORDER BY Goals.Date DESC) GameNumber
FROM Goals
),
Medians as (
SELECT
Home,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY HomeGoals) OVER (PARTITION BY Home) GoalMedian
FROM Last6
WHERE GameNumber <= 6
)
SELECT *
FROM Goals G
WHERE EXISTS (SELECT NULL FROM Medians WHERE G.Home = Medians.Home AND GoalMedian >= 2)

关于sql-server - SQL : Recursive search for each row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17793119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com