2017-02-04 66 views
0

我有一個PostgreSQL表稱爲login_logs它具有以下字段數:PostgreSQL的選擇和日期

日期,時間,用戶名,ip_addr中

我有以下的SQL獲取登錄大於或等於某一特定日期:

SELECT * FROM login_logs WHERE date>='2016-10-01' 

不過,我只想獲得用戶名和日期WHERE用戶名具有在同一天多個登錄的列表。例如,如果用戶名有兩次或更多的條目,那麼它應該返回該用戶名,該日期以當天登錄次數爲計數單位。因此,如果用戶有另外兩個以上的登錄日期,並且應該顯示用戶名,日期和計數。

任何想法,我可以做到這一點?

+1

'date'是一列的名聲。 '時間'也是。順便說一句:將日期+時間結合到時間戳中並使用它更爲方便。 – wildplasser

回答

3

像這樣的事情會做的伎倆:

SELECT 
    username, 
    COUNT(*) as count, 
    date_trunc('day', date) as day 
FROM login_logs 
WHERE date>='2016-10-01' 
GROUP BY username, day 
HAVING COUNT(*) > 1 

我們組登錄通過用戶名和一天,因爲我們想成爲推理由在同一天同一個用戶登錄的組。然後,我們只保留擁有多個條目的組。

0

在Postgres裏,你可以使用COUNT(DISTINC)

SELECT username, ip_addr, count(distinct date) as count_dates 
FROM login_logs 
GROUP BY username, ip_addr 
WHERE date >= '2016-10-01';