1

OK、次のような 2 つのテーブルがあります。

Person:
| ID | Name |
+----+------+
| 0  | Carl |
+----+------+
| 1  | Max  |
+----+------+
| 2  | Lars |

Status
| PersonID | Submitted  | Status |
+----------+------------+--------+
| 0        | *DATETIME* | 1      |
+----------+------------+--------+
| 0        | *DATETIME* | 1      |
+----------+------------+--------+
| 0        | *DATETIME* | 3      |
+----------+------------+--------+
| 0        | *DATETIME* | 1      |
+----------+------------+--------+
| 1        | *DATETIME* | 5      |
+----------+------------+--------+

私が受け取りたいのは、最後に送信されたステータスのユーザー テーブル内のすべての人を取得することです。

私がこのようなものを使用する場合:

SELECT DISTINCT
    Person.Name As Username,
    Status.Status As Userstatus
FROM Person
LEFT JOIN Status
ON Status.PersonID = Person.ID

次のような結果が得られます。

| Username | Userstatus |
+----------+------------+
| Carl     | 1          |
+----------+------------+
| Carl     | 3          |
+----------+------------+
| Max      | 5          |
+----------+------------+
| Lars     | NULL       |
+----------+------------+

それで、どうすればこれを行うことができますか?この場合、最新の Status.Submitted が ==1 (PersonID == 0 の Status.PersonID の最後の行) であるとしましょう。他の Carls はスキップします。

編集: SQL Compact を使用していることを書き忘れていました。

Edit2:素晴らしい回答がいくつかありましたが、残念ながら、ステータス値がnullのユーザーも取得したいことを忘れていました。そこで、新しいユーザーをテーブルに追加しました

4

5 に答える 5

1

コンパクト版は持っていませんが、これでうまくいくと思います:

SQL サーバー 2008 の例

select person.name as username,
       x.status as userstatus
from person left join (
      select s.personId, s.status
      from status s join (
        select personId, max(submitted) subs
        from status
        group by personid ) s2
        on s.personid = s2.personid and s.submitted = s2.subs
      ) x on person.id = x.personid

| USERNAME | USERSTATUS |
-------------------------
|     Carl |          1 |
|      Max |          5 |
于 2013-05-21T09:03:05.687 に答える
1

これを試してくださいQuery

SELECT
    Person.Name As Username,
    Status.Status As Userstatus
FROM Person
INNER JOIN Status
ON Status.PersonID = Person.ID
WHERE Status.Submitted in 
(Select Max(Submitted) from Status group by PersonID)
于 2013-05-21T09:01:08.617 に答える