get only last row in each day's multiple entries in TSQL

后端 未结 4 1251
轮回少年
轮回少年 2020-12-31 23:44

I have a table, something like:

Id        Name        EnteredOn                    Percentage
`````````````````````````````````````````````````````````````
         


        
相关标签:
4条回答
  • 2021-01-01 00:11
    ;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
    
    0 讨论(0)
  • 2021-01-01 00:17

    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)
    
    0 讨论(0)
  • 2021-01-01 00:27
    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
    
    0 讨论(0)
  • 2021-01-01 00:31

    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
    
    0 讨论(0)
提交回复
热议问题