我將用戶登錄保存在名爲loginstats的表中,我想檢索每個用戶的最後一次登錄,我使用這些代碼但我遇到了一些錯誤,我的錯誤是什麼?在sql server 2008中嵌套選擇
select *
from loginStats
where id in (
select distinct username, MAX(id) as id
from loginStats
group by username)
我將用戶登錄保存在名爲loginstats的表中,我想檢索每個用戶的最後一次登錄,我使用這些代碼但我遇到了一些錯誤,我的錯誤是什麼?在sql server 2008中嵌套選擇
select *
from loginStats
where id in (
select distinct username, MAX(id) as id
from loginStats
group by username)
select *
from loginStats
where id in (
select distinct MAX(id) as id
from loginStats
group by username)
你不能在你的IN
子查詢多場輸出。
您正在做id IN
,但正試圖將其與多列進行比較。試試這個:
SELECT A.*
FROM LoginStats A
INNER JOIN (SELECT DISTINCT username, MAX(id) as id
FROM loginStats
GROUP BY username) B
ON A.username = B.username AND A.id = B.id
的錯誤是IN子句中只有一列可以指定與你指定兩個:username
和id
。
您正在選擇兩個字段,您應該只返回一個字段。此相關子查詢應該爲你工作:
select *
from loginStats AS a
where id = (
select MAX(id) as id
from loginStats AS b
where b.username = a.username)
或者你也可以做到這一點是這樣的:
;WITH CTE
AS
(
SELECT
RANK() OVER(
PARTITION BY loginStats.username
ORDER BY loginStats.id DESC
) AS iRank,
loginStats.*
FROM
loginStats
)
SELECT
*
FROM
CTE
WHERE
CTE.iRank=1
Here是一些信息,如何使用rank
功能以及它是如何應用。
Here是msdn上關於rank
函數的一些信息。
Here約爲cte
的功能和用法的一些信息
Here是一些有關With
條款以及如何使用
希望它可以幫助你瞭解
什麼是「ID」,它是如何涉及「上次登錄」?你爲什麼要做一個子選擇?也許你可以解釋(a)你的模式和(b)你得到什麼錯誤? – Joe 2012-02-27 19:23:36