2011-08-18 47 views
0

我基本上想要做的是:計算屬性的差異,然後獲得最大差異的行。使用別名獲得此SQL語句權利

所以,這裏是我的嘗試:在HAVING子句中

SELECT caller_aor, (end_time - start_time) as duration 
    FROM cdrs 
    GROUP BY caller_aor 
    HAVING duration = (SELECT MAX(end_time - start_time) FROM cdrs); 

時間給出了一個錯誤,但我不能找出我要在那裏做。

幫助表示讚賞。

回答

3

你不想要GROUP BYHAVING(它們僅在聚合列時才使用)。

你想要一個簡單的WHERE

SELECT caller_aor, (end_time - start_time) as duration 
FROM cdrs 
WHERE (end_time - start_time) = (SELECT MAX(end_time - start_time) FROM cdrs); 
+0

@void:如果多個記錄具有相同的持續時間,則準備好多個結果。 – Bill

+0

這個技巧。 – void

2

嘗試此查詢

SELECT top 1 caller_aor, Max(end_time - start_time) as duration 
FROM cdrs 
GROUP BY caller_aor 
Order by duration 
1

看待這個另一種方法是使用一個limit

SELECT caller_aor, (end_time-start_time) AS duration 
FROM cdrs 
ORDER BY duration DESC 
LIMIT 1 
+0

嗨, 感謝您的回答。 這不是一件容易的事。接下來的陳述我接近了,但持續時間字段仍然是空的。 SELECT caller_aor,max(end_time - start_time)作爲持續時間 FROM cdrs GROUP BY caller_aor ORDER BY duration DESC LIMIT 1; – void