22,209
社区成员
发帖
与我相关
我的任务
分享
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[UID] int,[INTOTIME] Date)
Insert #T
select 1,121,'2017-10-1' union all
select 2,122,'2017-10-1' union all
select 3,122,'2017-10-18' union all
select 4,122,'2017-11-5' union all
select 5,121,'2017-5-5' union all
select 6,121,'2017-10-1'
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY UID ORDER BY INTOTIME DESC ) AS num
FROM #T
)
SELECT ID
FROM cte
WHERE num = 1
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[UID] int,[INTOTIME] Date)
Insert #T
select 1,121,'2017-10-1' union all
select 2,122,'2017-10-1' union all
select 3,122,'2017-10-18' union all
select 4,122,'2017-11-5' union all
select 5,121,'2017-5-5' union all
select 6,121,'2017-10-1'
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY UID ORDER BY INTOTIME DESC ) AS num
FROM #T
)
SELECT ID
FROM cte
WHERE num = 1
use Tempdb
go
--> --> 听雨停了-->测试数据
if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([ID] int,[UID] int,[INTOTIME] Date)
Insert #tab
select 1,121,'2017-10-1' union all
select 2,122,'2017-10-1' union all
select 3,122,'2017-10-18' union all
select 4,122,'2017-11-5' union all
select 5,121,'2017-5-5' union all
select 6,121,'2017-10-1'
--测试数据结束
;WITH cte AS (
SELECT *,
--相同日期只取一条
ROW_NUMBER()OVER(PARTITION BY uid ORDER BY intotime DESC) AS rn
--相同日期取多条
--dense_rank()OVER(PARTITION BY uid ORDER BY intotime DESC) AS rn
FROM #tab
)
SELECT id,uid,intotime FROM cte WHERE rn=1
id uid intotime
----------- ----------- ----------
1 121 2017-10-01
4 122 2017-11-05
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[UID] int,[INTOTIME] Date)
Insert #T
select 1,121,'2017-10-1' union all
select 2,122,'2017-10-1' union all
select 3,122,'2017-10-18' union all
select 4,122,'2017-11-5' union all
select 5,121,'2017-5-5' union all
select 6,121,'2017-10-1'
Go
--测试数据结束
;WITH cte AS (
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY UID ORDER BY INTOTIME DESC ) AS num
FROM #T
)
SELECT ID ,
UID ,
INTOTIME
FROM cte
WHERE num = 1
Select *
From Table a
Where INTOTIME=(Select max(INTOTIME) From Table b Where b.UID=a.UID)
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[UID] int,[INTOTIME] Date)
Insert #T
select 1,121,'2017-10-1' union all
select 2,122,'2017-10-1' union all
select 3,122,'2017-10-18' union all
select 4,122,'2017-11-5' union all
select 5,121,'2017-5-5' union all
select 6,121,'2017-10-1'
Go
--测试数据结束
SELECT UID ,
MAX(INTOTIME) AS INTOTIME
FROM #T
GROUP BY UID