每个用户名的最大日期 [英] Max date per username

查看:84
本文介绍了每个用户名的最大日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,



我正在尝试获取每个用户名的最新日期。数据如下:



日期用户名金额PID

12-12-2015 Mr Y R50 5997897

15-12-2015 Y R56先生8784545

13-07-2015 J R89女士87824

04-04-2015 J R87女士875414



所以输出需要:

日期用户名金额PID

15-12-2015 Y R56先生8784545

13-07-2015女士J R89 87824



我尝试过以下方法但没有成功:

Hi there,

I am trying to get the lastest date per username. The data looks as follows:

Date Username Amount PID
12-12-2015 Mr Y R50 5997897
15-12-2015 Mr Y R56 8784545
13-07-2015 Ms J R89 87824
04-04-2015 Ms J R87 875414

So the output needs to be:
Date Username Amount PID
15-12-2015 Mr Y R56 8784545
13-07-2015 Ms J R89 87824

I have tried the following to no success:

select s1.Date, s1.UserName, s2.TradeAmount  from #ListOfTrans s1 
inner join
(
  select max(a.Date) as  Date,
    a.Amount, a.Username, a.PortfolioID
  from  #ListOfTrans a
  group by UserName,Amount,Date, PID
) s2
  on s1.UserName = s2.UserName
  and s1.Date = s2.Date
  and s1.PID = s2.PID
  group by s1.UserName, s2.Amount,s1.Date

推荐答案

陈你的查询是这样的,然后再试一次



Change your query like this and try again

select T.*
from    
(
  select a.UserName, max(a.Date) as  MAXDate
  from  #ListOfTrans a
  group by UserName
) T INNER JOIN #ListOfTrans LT ON T.UserName = LT.UserName AND T.Date = LT.MAXDATE


SQL很棒,因为有很多方法可以写东西。上面的一个会起作用,但我更喜欢下面的语法。



SQL is great, cause there are tons of ways to write something. The one above will work, but I prefer the syntax below.

SELECT (SELECT MAX(Date)
		FROM #ListOfTrans T2
		WHERE T2.UserName = T1.UserName) Date,
		UserName,
		Amount, 
		PID
FROM #ListOfTrans T1





这里需要注意的一点是,如果这个表很大,这个查询可能会变慢。您应该考虑在UserName和Date列的表上添加索引。



Hogan



One thing to note here, if this table is going to be large, this query could get slow. You should consider adding an index on the table of UserName and Date column.

Hogan


首先,使用正确的数据为每个表列的预期目的键入,例如日期 [ ^ ]而不是日期字段的varchar,这将消除任何数据错误和丑陋的转换代码。 />
其次,避免使用关键字或数据类型名称,例如'date'作为字段名称。

然后,试试这个:

First thing first, use proper data type for the intended purpose of each table column, e.g. Date[^] instead of varchar for the date field, that will eliminate any data error and ugly conversion code.
Secondly, avoid using keywords or data type name such as 'date' as field name.
Then, try this:
select * from tablename t1 where datefield = (
select max(datefield) from tablename t2 where t1.username=t2.username)


这篇关于每个用户名的最大日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆