【发布时间】:2015-09-01 15:20:58
【问题描述】:
如何在 SQL Server 中解决此问题
Table: emp
Pid | Address | City | datetime | Edate | level
1 | Homeless | Chen | 2014-11-13 09:32:14.000 |2013-02-10 |3
1 | 3913 W. Strong | Chen | 2011-03-044 19:04:10.000 |2014-02-04 |7
1 | 1100 W MALLON | Chen | 2014-11-13 09:32:14.000 |2013-02-10 |5
2 | 610 W GARLAND #3 | Hyd | 2013-11-13 09:32:14.000 |2014-04-02 |4
3 | banvanu | chen | 2015-03-044 06:04:10.000 |2015-05-06 |6
3 | naneku | chen | 2015-03-044 06:04:10.000 |2015-06-09 |4
根据上表,我想要如下所示的输出
Pid | Address | City | datetime | Edate | level
1 | 1100 W MALLON | Chen | 2014-11-13 09:32:14.000 |2013-02-10 |5
2 | 610 W GARLAND #3 | Hyd | 2013-11-13 09:32:14.000 |2014-04-02 |4
3 | naneku | chen | 2015-03-044 06:04:10.000 |2015-06-09 |4
我们需要根据以下条件从同一张表中获取地址,城市
我们获得输出的条件很少:第一级根据 pid 检查 max(datetime) 如果 max(datetime) 值对于相同的 pid 相同,那么相同的 pid 需要检查 max(edate) 如果我们再次获得相同的值然后我们需要检查 max(level) 特定患者的检索地址,该 pid 的城市
我尝试如下
select * from (select *,row_number()over(partition by id ,order by datetime,edate,level)as rno
from emp)
where rno=1
但是上面的查询没有给出预期的结果 请告诉我如何编写查询以在 sql server 中完成此任务
【问题讨论】:
-
如果你想要最大日期时间,最大日期,最大级别,不应该是降序排序--
ROW_NUMBER() OVER (PARTITION BY PID ORDER BY datetime DESC, eDate DESC, level DESC) -
当您为问题添加标签时,请不要为每个版本都使用标签。只需使用通用 sql-server,如果适用,请使用特定版本的标签。
标签: sql-server sql-server-2008 sql-server-2005 sql-server-2012