1

ユニーク ユーザー、システムに最初に記録されたエントリの日付、および最後に記録されたエントリの日付を示すクエリを作成しようとしています。これらは、ユーザー テーブルとログ テーブルの 2 つのテーブルに分割されます。

ユーザー:

| Userid | Username    |
|--------|-------------|
|20      | Tom Smith   |
|21      | Jim Jones   |
|22      | Sandy Brown |

ログ:

| Logid | UserID  | Date       | Value        |
--------|---------|------------|--------------|
| 1     | 21      | 01/03/2013 | Login        |
| 2     | 22      | 01/04/2013 | Login        |
| 3     | 21      | 01/05/2013 | Edit         |
| 4     | 20      | 01/06/2013 | Login        |
| 5     | 20      | 01/07/2013 | Search       |
| 6     | 22      | 01/08/2013 | Login        |
| 7     | 21      | 01/09/2013 | Close        |
| 8     | 21      | 01/11/2013 | Login        |
| 9     | 20      | 01/12/2013 | Edit         |
| 10    | 22      | 01/13/2013 | Search       |

これは、私が書こうとしているクエリの望ましい結果です:

|Userid | UserName    | First Log Date | Last Log Date |
|-------|-------------|----------------|---------------|
| 20    | Tom Smith   | 01/06/2013     | 01/12/2013    |
| 21    | Jim Jones   | 01/03/2013     | 01/11/2013    |
| 22    | Sandy Brown | 01/04/2013     | 01/13/2013    |

これまでのところ、最初の 2 つの列がありますが、最初と最後の日付の列がわかりません。これまでのクエリは次のとおりです。

select 
    distinct(u.userid1) as 'Userid',
    u.username as 'UserName'
from 
    users u,
    log l
where
    u.userid = l.userid

私は SQL Server 2008 を使用しています。

4

3 に答える 3

1

必要なのは、集計関数を適用してminmax日付を取得し、次にgroup by u.userid, u.username:

select u.userid as 'Userid',
  u.username as 'UserName',
  min(l.date) FirstDate,
  max(l.date) lastDate
from users u
inner join log l
  on u.userid = l.userid
group by u.userid, u.username

デモで SQL Fiddle を参照してください

于 2013-02-06T20:48:51.583 に答える
1

各レコードの日付をmin取得するだけです。max

select 
    u.userid as [Userid],
    u.username as [UserName],
    min([Date]) as [First Log Date],
    max([Date]) as [Last Log Date]
from users u 
inner join log l on u.userid = l.userid
group by u.userid, u.username 
于 2013-02-06T20:47:19.937 に答える
0

あなたは単に必要ですgroup by

select u.userid, u.username,
       MIN(date) as FirstLogDate, MAX(date) as MaxLogDate
from users u join
     log l
      on u.userid = l.userid
group by u.userid, u.username      
于 2013-02-06T20:49:12.810 に答える