2

次の表を考慮してください。

User CreatedDateTime 数量
----- ----- --------
ジム 2012-09-19 01:00 1
ジム 2012-09-19 02:00 5
ジム 2012-09-19 03:00 2
ボブ 2012-09-19 02:00 2
ボブ 2012-09-19 03:00 9
ボブ 2012-09-19 05:00 1

関連する を判別できるように、CreatedDateTime各の最新の行 ( で定義されている) を返すクエリはどれですか。UserQuantity

すなわち、次のレコード

User CreatedDateTime 数量
----- ----- --------
ジム 2012-09-19 03:00 2
ボブ 2012-09-19 05:00 1

Group By User簡単に andCreatedDateTimeと を追加できると考えましたHaving MessageCreationDateTime = MAX(.MessageCreationDateTime。もちろん、これは機能しませQuantityGroup By

4

5 に答える 5

4
;WITH x AS
(
  SELECT [User], CreatedDateTime, Quantity, 
   rn = ROW_NUMBER() OVER (PARTITION BY [User] ORDER BY CreatedDateTime DESC)
  FROM dbo.table_name
)
SELECT [User], CreatedDateTime, Quantity
FROM x WHERE rn = 1;
于 2012-09-19T14:31:28.790 に答える
4

SQL Server を使用しているため、これに対してウィンドウ関数を使用できます。

SELECT [User], CreatedDateTime, Quantity
FROM
    (
        SELECT [User], CreatedDateTime, Quantity,
                ROW_NUMBER() OVER(PARTITION BY [User] ORDER BY CreatedDateTime DESC) as RowNum
        FROM tableName
    ) a
WHERE  a.RowNum = 1

SQLFiddle デモ

于 2012-09-19T14:31:04.667 に答える
1

ウィンドウ関数を使用できない場合は、サブクエリを使用できます。

select t1.[user], t2.mxdate, t1.quantity
from yourtable t1
inner join
(
    select [user], max(CreatedDateTime) mxdate
    from yourtable
    group by [user]
) t2
    on t1.[user]= t2.[user]
    and t1.CreatedDateTime = t2.mxdate

SQL Fiddle with Demoを参照してください

于 2012-09-19T14:32:24.660 に答える
0
SELECT DISTINCT 
User, 
CreatedDateTime, 
Quantity
FROM 
YourTable
WHERE 
CreatedDateTime = 
(SELECT MAX(CreatedDateTime) FROM YourTable t WHERE t.User = YourTable.User)
于 2012-09-19T14:32:10.773 に答える
0
select * from <table_name> where CreatedDateTime in (select max(CreatedDateTime) from <table_name> group by user) group by user;
于 2012-09-19T15:00:33.430 に答える