复杂的复合SQL查询

时间:2013-10-01 10:32:12

标签: sql ms-access

我在SQL上相当生疏,因为我使用它已经很长时间了,即使我有这个问题,我也很少需要进行复杂的查询。

我有一个包含数据列的数据库,如下所示:

Key, Instance, User ID, Day, Size

- 这是主键 实例 - 这是特定实例的描述符(这将是唯一的) 用户ID - 这将引用许多用户中的一个,其中该数字将小于此表中的条目数。
- 这是特定用户创建此实例的日期。它将是第1天或第2天之一 大小 - 这是存储数据的大小。

现在并非所有用户都会在2天内创建实例(尽管他们可能在任何一天创建了多个实例)。

我正在查询将在第1天选择具有最大尺寸的实例,其中该用户ID还在第2天创建了实例。

我完全不知道从哪里开始。

我编写了一些C#代码,用于过滤从更简单的SQL查询返回的结果,但是它太慢了,无法给我一些我想要的结果。

我是否希望从SQL中获得太多(即我甚至可能要求)?如果有人能给我一个这样一个问题的例子,并解释一下,大概是复合查询的每一步是做什么的?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

至于解释 - 您的表已连接到自身,因此结果将为具有两个日期活动的用户提供行。结果按大小按降序排序,并且只返回第一行,该行应具有最大的大小。

答案 1 :(得分:1)

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