id login_name login_time 1 aa 2002-09-19 2 bb 2002-12-19 3 bb 2002-12-30
如何編寫一條SQL語句來找出擁有最大登錄次數的用戶的最新login_time。例如,在此示例數據中,用戶「bb」已登錄兩次,他的最近login_time爲「2002-12-30」。如何寫這個sql語句?
id login_name login_time 1 aa 2002-09-19 2 bb 2002-12-19 3 bb 2002-12-30
如何編寫一條SQL語句來找出擁有最大登錄次數的用戶的最新login_time。例如,在此示例數據中,用戶「bb」已登錄兩次,他的最近login_time爲「2002-12-30」。如何寫這個sql語句?
select *
from [login table]
where login_name [has max] on login_time [is soonest]
這不是一個有效的SQL語句,這只是僞代碼 – 2010-08-13 16:26:20
SELECT
id,
MAX(`login_time`) AS `login_time`
FROM table_name
GROUP BY login_name
這是你想要什麼?你能解釋一下多一點,如果不..
這個答案是錯誤的。我測試過了,對不起。 – SunLiWei 2010-08-13 17:03:51
SELECT login_name, COUNT(*) as num_logins, max(login_time) as last_login_time
FROM table_name ORDER BY num_logins DESC
然後,取決於你所使用的SQL Server上,你可以添加limit 1
(在MySQL的情況下),或top 1
爲MS SQL Server或別的東西了不同的服務器只能獲得第一條記錄。
這個答案是錯的,對不起。 – SunLiWei 2010-08-13 17:09:19
也許你應該擴展它的錯誤,讓海報和其他人可以更好地瞭解你想要得到的東西。 – 2010-08-13 17:20:18
@ alex07 - 我想你想在那裏有一個「GROUP BY login_name」。 – 2010-08-13 17:21:05
Oracle數據庫上的以下作品:
SELECT MAX(LOGIN_TIME)
FROM LOGIN_TABLE
WHERE LOGIN_NAME = (SELECT LOGIN_NAME
FROM (SELECT LOGIN_NAME, COUNT(*) AS LOGIN_COUNT
FROM LOGIN_TABLE
GROUP BY LOGIN_NAME
ORDER BY LOGIN_COUNT DESC)
WHERE ROWNUM = 1)
分享和享受。
這裏是最簡單的方法:
SELECT
t.login_name
,COUNT(t.id) AS login_counts
,MAX(t.login_time) AS latest_login_time
FROM this_table AS t
GROUP BY t.login_name
ORDER BY login_counts DESC, login_name
;
頂行給你login_name
最登錄。
而這裏的硬的方式:
SELECT
t.login_name
,MAX(t.login_time) AS latest_login_time
FROM this_table AS t
INNER JOIN (
-- Determine who has the most logins
SELECT TOP 1 x.login_name, COUNT(x.id) AS login_count
FROM this_table AS x
GROUP BY x.login_name
ORDER BY login_count DESC -- to get the highest counts first
) AS m
ON t.login_name = m.login_name
GROUP BY t.login_name
;
,讓你一個名字和日期,這就是它,雖然它並沒有考慮到的可能性,有可能超過1名具有最大登錄次數。我會留給你弄清楚。
「最大登錄次數」是什麼意思? – BoltClock 2010-08-13 16:23:03
SQL變體是什麼?對於mysql,t-sql等,答案會有所不同 – 2010-08-13 16:23:17
最大登錄數可能是多少? – 2010-08-13 16:23:43