iam*_*ous 7 t-sql sql-server sql-server-2008
我有一张桌子,类似于:
Id Name EnteredOn Percentage
`````````````````````````````````````````````````````````````
01 person1 2011-03-09 17:29:35.683 56.29
02 person1 2011-03-09 17:29:35.731 76.29
03 person1 2011-03-09 18:15:78.683 56.29
04 person1 2011-03-10 17:29:35.683 56.29
05 person1 2011-03-10 16:29:31.683 56.29
06 person1 2011-03-11 17:29:35.683 56.29
Run Code Online (Sandbox Code Playgroud)
总结上面的表格,有3排了一天09和2行白天10.
现在,我只想选择最新的行 - 每行一行.
(一行为9,一行为10,一行为11)
由于时间戳,我不能使用distinct.我不能分组并使用:
CAST(CONVERT(FLOAT, EnteredOn) AS INT)
Run Code Online (Sandbox Code Playgroud)
因为当我选择EnteredOn字段时,它会抱怨它没有分组.我无法合并distinct(cast..date...)因为我无法获得正确的语法.
我如何选择 - 只有Name,EnteredOn,Percentage字段与每天不同?
提前谢谢了.
Mik*_*son 14
;with cte as
(
select
*,
row_number() over(partition by datediff(d, 0, EnteredOn) order by EnteredOn desc) as rn
from YourTable
)
select *
from cte
where rn = 1
Run Code Online (Sandbox Code Playgroud)
1行/天:
SELECT t1.Name, t1.EnteredOn, t1.Percentage
FROM table t1
JOIN (SELECT MAX(EnteredOn) Max_EnteredOn_By_Day
FROM table
GROUP BY convert(varchar, EnteredOn, 112)) t2
ON t1.EnteredOn = t2.Max_EnteredOn_By_Day
Run Code Online (Sandbox Code Playgroud)
1行/人/天:
SELECT t1.Name, t1.EnteredOn, t1.Percentage
FROM table t1
JOIN (SELECT Name, MAX(EnteredOn) Max_EnteredOn_By_Day
FROM table
GROUP BY Name, convert(varchar, EnteredOn, 112)) t2
ON t1.Name = t2.Name
AND t1.EnteredOn = t2.Max_EnteredOn_By_Day
Run Code Online (Sandbox Code Playgroud)
SELECT Name, EnteredOn, Percentage
FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(8),EnteredOn,112) ORDER BY EnteredOn DESC) Corr
FROM YourTable) A
WHERE Corr = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15779 次 |
| 最近记录: |