2012-01-13 71 views
0

我需要通過unix時間戳選擇最近的2行。我還想計算一個IP地址的出現次數。我可以用一個查詢來做到這一點嗎?使用計數並返回多個行

這是我所希望的最終結果將是什麼樣子:

19  12345690  127.0.0.1  2 
19  12345678  127.0.0.1  1 

這裏是我迄今爲止,但它只會返回1行。我需要一個像計數()由限制條款受到影響2.

SELECT 
count(timestamp) numOfOccurances, 
timestamp, 
ip, 
id 
FROM x 
WHERE ip = '127.0.0.1' 
ORDER BY 
timestamp DESC 
LIMIT 2 
+0

因此,在您的文章上面,'19'是所需的計數或是'id'? (你查詢表明2/1列是'id',而'19'列是count?) – 2012-01-13 06:03:49

+0

@ mathematical.coffee,19應該是count,id是最右邊的列。我可以用我的應用程序代碼來解決這個問題。 – Muzz 2012-01-14 03:09:46

回答

0

聚合功能,因此沒什麼得到所有匹配的行數()(或同等學歷)在表上沒有切實可行的方法和有限的行數在同一時間。

如果您的數據庫服務器與您的應用程序位於同一大陸,則運行兩個單獨的查詢可能會更快。

編輯:通過上面的「實用」,我的意思是有使用子查詢的選項。如果你真的,絕對必須在一次...

SELECT 
    (SELECT count(*) FROM example WHERE ip = x1.ip) AS numOfOccurances, 
    timestamp, 
    ip, 
    id 
FROM example x1 
ORDER BY timestamp DESC 
LIMIT 2 
+0

謝謝SnowCrash。 – Muzz 2012-01-13 05:58:16

0
SELECT 
count(timestamp) numOfOccurances, 
timestamp, 
ip, 
id 
FROM x 
WHERE ip = '127.0.0.1' 
GROUP BY timestamp 
ORDER BY 
timestamp DESC 
LIMIT 2 
+0

感謝布賴恩,但時間戳是不同的,這意味着我會得到兩個行,但每個'numOfOccurances'列將有'1'。我需要每個列的總累積數。 – Muzz 2012-01-13 05:55:14