复杂的复合SQL查询

复杂的复合SQL查询,sql,ms-access,Sql,Ms Access,我对SQL已经相当生疏了,因为我已经很久没有使用它了,而且我很少需要做复杂的查询,即使我已经做了 我有一个数据库,数据列如下: Key, Instance, User ID, Day, Size 键-这是主键。 实例-这是特定实例的描述符,它将是唯一的。 用户ID-这将指数量小于此表中条目数的用户中的1个。 Day-这是特定用户创建此实例的日期。这将是第一天或第二天中的一天。 大小-这是存储的数据的大小 现在,并非所有用户都会在2天内创建实例,尽管他们可能会在这两天内创建多个实例 我正在进行一

我对SQL已经相当生疏了,因为我已经很久没有使用它了,而且我很少需要做复杂的查询,即使我已经做了

我有一个数据库,数据列如下:

Key, Instance, User ID, Day, Size
键-这是主键。 实例-这是特定实例的描述符,它将是唯一的。 用户ID-这将指数量小于此表中条目数的用户中的1个。 Day-这是特定用户创建此实例的日期。这将是第一天或第二天中的一天。 大小-这是存储的数据的大小

现在,并非所有用户都会在2天内创建实例,尽管他们可能会在这两天内创建多个实例

我正在进行一个查询,该查询将选择在第1天大小最大的实例,该用户ID在第2天也创建了一个实例

我完全不知道从哪里开始

我编写了一些C代码来过滤从一个简单得多的SQL查询返回的结果,但是它太慢了,无法给出我想要的结果

我对SQL ie的期望是否过高?我的要求是否可能?如果是这样的话,有人能给我一个这样一个查询的例子,并解释复合查询的每个步骤都在做什么吗

谢谢

Select Top 1 Key, Instance, UserId, Day, Size
From Table1 
Where UserId IN (Select UserId from Table1 where Day = 'Day 2') 
And Day = 'Day 1'
Order By Size asc
至于解释-您的表是连接到自身的,所以结果将为同时具有两天活动的用户提供行。结果按大小降序排序,只返回第一行,该行的大小应该最大


至于解释-您的表是连接到自身的,所以结果将为同时具有两天活动的用户提供行。结果按大小降序排序,只返回第一行,它的大小应该最大。

这看起来很完美。。。我只是想看看它是如何与我的实际数据库一起工作的我使用了一个精简的示例谢谢,但我在实现这一点时遇到了困难,因为Nadeem_MK的工作要容易得多,所以我接受了他们的答案。这看起来很完美。。。我只是想看看它是如何与我的实际数据库一起工作的我使用了一个精简的示例谢谢,但我在实现这一点时遇到了困难,因为Nadeem_MK的工作要容易得多,所以我接受了他们的答案。乍一看,这个答案看起来不太一样,与athabaska一样完美,但仍能让我更好地理解复合查询,所以非常感谢!:答案其实是给你正确的发展方向;我不确定这一个是否能像你指定的那样工作。请参阅,Where exists从表1中选择UserId,其中Day='Day 2'只检查表中任何记录的id和Day 2。因此,它与用户同时拥有第1天和第2天的情况无关。它可能应该是从表1中选择UserId中的UserId,其中Day='Day 2'?我使用了这个方法,因为我发现它更容易理解!乍一看,这个答案不像athabaska的答案那么完美,但仍然让我对复合查询有了比以前更好的理解,所以非常感谢!:答案其实是给你正确的发展方向;我不确定这一个是否能像你指定的那样工作。请参阅,Where exists从表1中选择UserId,其中Day='Day 2'只检查表中任何记录的id和Day 2。因此,它与用户同时拥有第1天和第2天的情况无关。它可能应该是从表1中选择UserId中的UserId,其中Day='Day 2'?我使用了这个方法,因为我发现它更容易理解!
SELECT Top 1 t1.*
FROM table t1
INNER JOIN table t2 on t1.UserID = t2.UserID AND t2.Day = 2
WHERE t1.Day = 1   
ORDER BY Size DESC