I have a table, something like:
Id Name EnteredOn Percentage
`````````````````````````````````````````````````````````````
;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
I would suggest one more trick here:
select top 1 with ties
Name, EnteredOn, Percentage
from YourTable
order by row_number() over(partition by datediff(d, 0, EnteredOn) order by Name, EnteredOn desc)
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
1 row/day:
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
1 row/person/day:
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