SQL:根据多个表中的值查找表中最早出现的行

时间:2012-03-05 20:09:59

标签: sql sql-server-2008

我意识到这个问题已被多次询问,而且我已经查看了很多关于这个问题的帖子,现在已经有一天多了。不幸的是,我一直无法解决我的具体问题,非常感谢你们所提供的任何帮助。

我认为这是每周多次在StackOverflow上出现的“每组最大”问题的变体。

正在针对工作票据的数据库运行查询。我需要的数据分布在许多表格中,我正在将它整合到一个区域中进行处理。在此特定实例中,更新表包含特定工作票证的多个行。我正在尝试将其加入票证表,并且只获取该票证的最早更新日期,其中用户ID与来自用户表的票证相关联的用户匹配。基本上我在更改user_id时使用,以确定何时将故障单分配给特定用户。

UPDATE_TABLE

updateNumber            | user_id       | date          | ticket_number
11                       | 4586b03       | 2011-11-30    | 923479283
12                       | 6786t03       | 2011-11-30    | 923479283
13                       | 7986003       | 2011-12-02    | 923479283
14                       | 7986003       | 2011-12-03    | 923479283
15                       | 7986003       | 2011-12-04    | 923479283
16                       | 5838397       | 2011-10-02    | 391983247
17                       | 7986004       | 2012-01-03    | 663738223
18                       | 7986003       | 2011-08-04    | 391983247

查询:

select 
    min(TA.updated_at) as UpdateVal
from Tickets T 
inner join Users U on U.id = T.assigned_user_id 
inner join UserGroup AU on U.login = AU.[User]
inner join TicketUpdate TA  on TA.task_id = T.id
where
   TA.task_id = 923479283 and TA.user_id = 7986003

返回:2011-12-02

当我为上面的特定行硬编码task_iduser_id时,此方法有效。但是,当我将T.id替换为923479283并将U.id替换为7986003以获取所有票证的此信息时,查询不返回任何内容。我尝试了很多不同的解决方案,包括通过别名加入TicketUpdate表,等等。

请帮助!

1 个答案:

答案 0 :(得分:0)

您需要在SELECTGROUP BY上添加这些列:

select TA.task_id, TA.user_id, min(TA.updated_at) as UpdateVal
from Tickets T 
inner join Users U on U.id = T.assigned_user_id 
inner join UserGroup AU on U.login = AU.[User]
inner join TicketUpdate TA  on TA.task_id = T.id
GROUP BY TA.task_id, TA.user_id