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
を実行していますが、複数の列と比較しようとしています。代わりにこれを試してみてください:username
とid
:
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句に1列のみを指定することができ、あなたは2を指定しているということです。
2つのフィールドを選択していますが、ここでは1つだけを返す必要があります。この相関サブクエリは、あなたのために働く必要があります。
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は、rank
機能に関するmsdnに関する情報です。
Hereは、いくつかの情報におよそWith
句でcte
機能と使用方法に関するいくつかの情報であり、
を理解するのに役立ちます願っていますどのように使われるか、どのようにそれをしません「最後のログイン」に関連していますか?なぜあなたはサブセレクトをしていますか?おそらくあなたは(a)あなたのスキーマと(b)あなたが得ているエラーを説明することができますか? – Joe