Sql server SQL Server多表从多个表中查询特定日期
我有三张桌子: 表1-成员Sql server SQL Server多表从多个表中查询特定日期,sql-server,Sql Server,我有三张桌子: 表1-成员 Id Name 1 Member1 2 Member2 表2-活动 Id Member_id Activity Date 1 1 Activity1 2001-1-1 2 1 Activity2 2001-2-1 3 1 Activity3 2001-3-1 4 2 Test 2010-4-1 表3–详细信
Id Name
1 Member1
2 Member2
表2-活动
Id Member_id Activity Date
1 1 Activity1 2001-1-1
2 1 Activity2 2001-2-1
3 1 Activity3 2001-3-1
4 2 Test 2010-4-1
表3–详细信息
Id Activity_id Information
1 2 Information
根据以下内容,成员id 1有三个活动:
SELECT Member.id, COUNT(*) AS number
FROM Member
INNER JOIN Activity ON Activity.Member_ID = Member.id
GROUP BY Member.id
我的问题是如何为表(1)中有2个活动的所有成员查找第二个活动(表2)的id和日期,并从表3中检索与此活动id相关的信息
提前感谢行号功能将在这里帮助您
select *
from (
select
*,
rn = row_number() over (partition by member_id order by id)
from
activity
) activityWithRn
inner join detailed on detailed.activity_id = activityWithRn.id
where activityWithRn.rn = 2
在这里,我按成员id对数据进行了分区,并按活动id对活动进行了排序,但您可能希望按日期进行排序?行数函数将在这里帮助您
select *
from (
select
*,
rn = row_number() over (partition by member_id order by id)
from
activity
) activityWithRn
inner join detailed on detailed.activity_id = activityWithRn.id
where activityWithRn.rn = 2
在这里,我已经按成员id对数据进行了分区,并按活动id对活动进行了排序,但您可能希望按日期进行排序?同意@mouters的说法,
ROW_NUMBER()
函数在这里确实很有帮助。但我认为排名应该与@mouters的建议略有不同
以下是我尝试的解决方案:
WITH ranked AS (
SELECT
*,
rn = ROW_NUMBER() OVER (PARTITION BY Member_id)
FROM Activity
)
SELECT
a.Member_id,
number = COUNT(*),
Activity_id = MAX(d.Activity_id),
Information = MAX(d.Information)
Date = MAX(CASE WHEN d.Id IS NOT NULL THEN a.Date)
FROM ranked a
LEFT JOIN Detailed d ON a.Id = d.Activity_id AND a.rn = 2
GROUP BY a.Member_id
同意@mouters的观点,
ROW\u NUMBER()
函数在这里确实很有用。但我认为排名应该与@mouters的建议略有不同
以下是我尝试的解决方案:
WITH ranked AS (
SELECT
*,
rn = ROW_NUMBER() OVER (PARTITION BY Member_id)
FROM Activity
)
SELECT
a.Member_id,
number = COUNT(*),
Activity_id = MAX(d.Activity_id),
Information = MAX(d.Information)
Date = MAX(CASE WHEN d.Id IS NOT NULL THEN a.Date)
FROM ranked a
LEFT JOIN Detailed d ON a.Id = d.Activity_id AND a.rn = 2
GROUP BY a.Member_id
因此,在表
Activity
中,您有Activity1
,在表Detailed
中,您有编号作为Activity\u id
(2)?您想按member
和Activity
分组还是只按member id
分组?在表Activity中,第二个Activity\u id是2。感谢您的活动计数3是按成员列出的三个不同活动,您不能将其加入到详细信息表中,并且只能获取一个活动的信息。如果我按memeber和activity分组,则我将获得一个活动列表,而不是活动数。谢谢,在表Activity
中,您有Activity1
,在表Detailed
中,您有编号作为Activity\u id
(2)?您想按member
和Activity
分组还是只按member id
分组?在表Activity中,第二个Activity\u id是2。感谢您的活动计数3是按成员列出的三个不同活动,您不能将其加入到详细信息表中,并且只能获取一个活动的信息。如果我按memeber和activity分组,则我将获得一个活动列表,而不是活动数。谢谢,当我在Activity.id=Detailed.Activity\u id上使用内部联接Detailed时,我得到以下错误:无法绑定多部分标识符“Activity.id”。请退出activityWithRn
表,而不是Activity
。基本上将activityWithRn
视为您的activity
表,但使用额外字段rn
PSpartitionbymember\u id
是可选的,它充当每个成员的分组谢谢各位,这是我一直在寻找的解决方案。输出其他活动对(2)有效,但对(1)或(3)无效,然后我用一个活动添加了另一个成员。当我将2更改为1时,输出为空。如果我在detailed.Activity\u id=Activity\u id上更改了detailed;当我输入1时,它将列出2行,当将1更改为2或3时,它将列出一行。唯一的挑战是表详细信息中的信息不会更改!我希望您的帮助。您能更新您的问题以显示您期望的输出,可能使用更多示例数据(例如与不同成员一起)。谢谢,当我使用Activity.id=Detailed.Activity\u id上详细的内部连接时。我得到此错误:多部件标识符“Activity.id”无法绑定。请将活动与rn
表连接,而不是活动
。基本上将activityWithRn
视为您的activity
表,但使用额外字段rn
PSpartitionbymember\u id
是可选的,它充当每个成员的分组谢谢各位,这是我一直在寻找的解决方案。输出其他活动对(2)有效,但对(1)或(3)无效,然后我用一个活动添加了另一个成员。当我将2更改为1时,输出为空。如果我在detailed.Activity\u id=Activity\u id上更改了detailed;当我输入1时,它将列出2行,当将1更改为2或3时,它将列出一行。唯一的挑战是表详细信息中的信息不会更改!我非常感谢您的帮助。您能否更新您的问题,以显示您期望的输出,也许可以使用更多的样本数据,例如不同成员的样本数据。