2012-03-05 73 views
1

我意识到这个问题已被多次询问,并且我已经浏览了许多关于此问题的帖子,现在已经查看了一天。不幸的是,我一直无法解决我的具体问题,并将不胜感激任何人都可以提供的帮助。SQL:根据多个表中的值查找表中行的最早发生

我相信这是每周数次出现在StackOverflow上的“每组最大n”组问题的变体。

该查询正在针对工作票据的数据库运行。我需要的数据分布在许多表格中,我将它们合并到一个单独的区域中进行处理。在此特定实例中,更新表包含特定工单的多行。我试图将它加入到票据表中,并且只抓取该票证的最早更新日期,其中用户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

** **什么数据库系统,以及哪个版本? ** SQL **只是结构化查询语言(Structured Query Language) - 许多数据库系统使用的语言 - SQL是** NOT **数据库产品......类似这样的东西通常是供应商特定的 - 所以我们真的需要知道什么您正在使用的数据库系统.... – 2012-03-05 20:13:40

+0

这是微软SMS 2008 – user1250570 2012-03-05 20:16:51

+0

因此,您发布的代码示例是_does_正确运行的代码示例,但还有另外一个非硬编码示例不会运行。是对的吗?如果是这样,你能准确地发布错误代码吗? – 2012-03-05 20:20:05

回答

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 
+0

谢谢,我相信这个工作,但是我以前试过,并没有按我的要求工作。希望这不是一个语法错误 – user1250570 2012-03-05 20:30:46

+0

这个解决方案是正确的我发布的情况。然而,我试图避免发布更大的实际查询出于安全原因,并且当我将更改应用到更大的查询时,解决方案抓住每个记录主要由于大型查询的结构,我道歉但我不认为我允许发布完整查询,公司政策和所有信息。我会将此标记为正确的,希望我们可以继续讨论这个问题。 – user1250570 2012-03-05 20:39:45

+0

较大的查询包含一些左外连接到其他表可能导致所有记录显示。 – user1250570 2012-03-05 20:42:00

相关问题