2

考虑下表:

用户创建日期时间数量
----- ----- --------
吉姆 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

什么查询将返回每个 的最新行(由 定义CreatedDateTimeUser,以便我们可以确定关联的Quantity.

即以下记录

用户创建日期时间数量
----- ----- --------
吉姆 2012-09-19 03:00 2
鲍勃 2012-09-19 05:00 1

我们认为我们可以简单地Group By User添加CreatedDateTime一个Having MessageCreationDateTime = MAX(.MessageCreationDateTime. 当然这不起作用,因为QuantityGroup By.

4

5 回答 5

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 回答
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 回答
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 回答