gpt4 book ai didi

sql - 在 SQL 子查询中使用多列

转载 作者:行者123 更新时间:2023-12-04 05:10:10 25 4
gpt4 key购买 nike

我的设置是我有两个表,Study 和 Activity_History。事件以研究为基础,因此存在一对多的关系。

我希望能够在 Activity_History 表上运行 SQL 查询,这将为我提供事件和以前运行的事件。我目前有这个:

SELECT 
*
FROM Activity_History AS A1
LEFT JOIN Activity_History AS A2
ON A2.Parent_Study_ID =
(
SELECT TOP 1 Parent_Study_ID
FROM Activity_History AS A3
WHERE A3.Parent_Study_ID = A1.Parent_Study_ID
AND A3.Activity_Date < A1.Activity_Date
ORDER BY Activity_Date DESC
)

这是行不通的。发生的事情是它拉动查询的 Activity_Date 方没有任何效果,它只是按每行的降序日期顺序返回第一个匹配的 Activity_Date。我认为这是因为在我的子查询中,我在 where 中使用了 Activity_Date,但这不在子查询选择中。

感谢您的帮助!

最佳答案

我假设您正在使用 SQL Server?如果是这样,那么这应该使用 ROW_NUMBER() 工作:

WITH CTE AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Parent_Study_Id ORDER BY Activity_Date ) RN
FROM Activity_History
)
SELECT *
FROM CTE T1
LEFT JOIN CTE T2 ON T1.RN = T2.RN+1 AND T1.Parent_Study_Id = T2.Parent_Study_Id

这是 SQL Fiddle .

关于sql - 在 SQL 子查询中使用多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987043/

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