2013-03-07 85 views
0

是否可以编写一个查询来查找在同一个查询中检索到的一组最小值中的最大值?SQl查询以从最小结果集中查找最大值集

通过减少值(在列表顶部留下所需的最大值)可以很容易地排序最小值,但是我很好奇是否可以构造只返回该值而不返回其他值的查询。

查询检索最小值:

SELECT dbo.tblDevices.Status 
, L.Device_id 
, MIN(L.DateAndTime) As 'End Date' 
FROM dbo.tblDeviceLocation AS L 
JOIN dbo.tblDevices 
ON L.Device_id = dbo.tblDevices.Device_id 
GROUP BY L.Device_id, dbo.tblDevices.Status 

我想找到这些分钟的最大的行。我想尝试使用子查询,但我没有看到它的工作原理,因为它返回了N最小值的行数。然后我想到了使用COMPUTE,因为这可以被认为是一个小计,但这也不起作用,因为你不能小计没有被分组的东西(L.DateAndTime)。

有什么想法?

*编辑: 我刚刚遇到这篇文章http://www.programmerinterview.com/index.php/database-sql/find-maximum-value-without-using-aggregate/从粗略快速阅读可能适用。如果我发现某事,我会更新。

回答

0

您可以使用ORDER BY,如果你使用SQL-Server的前1,如果你使用MySQL,那么你必须在查询

SELECT TOP 1 dbo.tblDevices.Status 
, L.Device_id 
, MIN(L.DateAndTime) As 'End Date' 
FROM dbo.tblDeviceLocation AS L 
JOIN dbo.tblDevices 
ON L.Device_id = dbo.tblDevices.Device_id 
GROUP BY L.Device_id, dbo.tblDevices.Status 
ORDER BY MIN(L.DateAndTime) DESC // order by max value 
+0

OMG结束使用LIMIT 1 ...我现在脑子已经死了。而已。谢谢。 – 2013-03-07 18:39:25

+0

@Snake_Plissken没问题,我们都有过这些日子。如果这解决了您的问题,请不要忘记将其标记为已接受的答案。 – 2013-03-07 22:20:36