2009-12-14 175 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