2009-12-14 112 views

回答

5

什么,以显示第一行和分钟的时间在第二行中访问最多时间:

SELECT time_value 
    FROM (SELECT MIN(time_column) AS time_value FROM SomeTable 
     UNION 
     SELECT MAX(time_column) AS time_value FROM SomeTable 
     ) 
ORDER BY time_value DESC; 

,除非有任何行应该做的工作在SomeTable中(或者你的DBMS不支持符号)。


简化评论中的每条建议 - 谢谢!

SELECT MIN(time_column) AS time_value FROM SomeTable 
UNION 
SELECT MAX(time_column) AS time_value FROM SomeTable 
ORDER BY time_value DESC; 

如果你可以从一个查询得到两个值,你可以使用提高查询性能:

SELECT MIN(time_column) AS min_time, 
     MAX(time_column) AS max_time 
    FROM SomeTable; 

真正良好的优化也许能对付的两半UNION版本一次传递数据(或索引),但很容易想象优化器分别处理UNION的每一半并处理两次数据。如果时间列上没有索引来加快速度,那可能涉及两个表扫描,这将比双值单行查询的单个表扫描慢得多(如果该表足够大,事情要紧)。

+3

为什么要考虑外部查询? 'SELECT MAX ... UNION ... SELECT MIN ...'应该做到这一点,顺序也是下降的。 – Asaph 2009-12-14 06:38:04

+0

嗯...很好的问题 - 不知道为什么,现在... – 2009-12-14 06:39:21

+0

为什么有人在问题上的标记是“MDB”时推定MS SQL Server? – 2009-12-14 22:03:22