我在SQL上相当生疏,因为我使用它已经很长时间了,即使我有这个问题,我也很少需要进行复杂的查询。
我有一个包含数据列的数据库,如下所示:
Key, Instance, User ID, Day, Size
键 - 这是主键
实例 - 这是特定实例的描述符(这将是唯一的)
用户ID - 这将引用许多用户中的一个,其中该数字将小于此表中的条目数。
日 - 这是特定用户创建此实例的日期。它将是第1天或第2天之一
大小 - 这是存储数据的大小。
现在并非所有用户都会在2天内创建实例(尽管他们可能在任何一天创建了多个实例)。
我正在查询将在第1天选择具有最大尺寸的实例,其中该用户ID还在第2天创建了实例。
我完全不知道从哪里开始。
我编写了一些C#代码,用于过滤从更简单的SQL查询返回的结果,但是它太慢了,无法给我一些我想要的结果。
我是否希望从SQL中获得太多(即我甚至可能要求)?如果有人能给我一个这样一个问题的例子,并解释一下,大概是复合查询的每一步是做什么的?
谢谢!
答案 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