Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 仅获取TSQL中每天多个条目的最后一行_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

Sql server 仅获取TSQL中每天多个条目的最后一行

Sql server 仅获取TSQL中每天多个条目的最后一行,sql-server,tsql,sql-server-2008,Sql Server,Tsql,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

我有一张桌子,大概是:

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
总结上表,第09天有三行,第10天有两行

现在,我只想选择最新的一行-每天一行。 一排9人,一排10人,一排11人

由于时间戳的原因,我无法使用distinct。我不能分组并使用:

CAST(CONVERT(FLOAT, EnteredOn) AS INT)
因为当我选择EnteredOn字段时,它会抱怨它没有分组。我不能把不同的日期组合起来。。。因为我找不到正确的语法

我如何选择只有名称、输入项和百分比字段,并且每天都有不同的字段

非常感谢。

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
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

我想在这里再建议一个技巧:

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)

您好,这是可行的,但是,我不明白它的大部分,查询在做什么?esp分区-这是做什么的?此查询在大量行上是否会减慢速度?谢谢,这只考虑日期,很抱歉之前没有提及,我也希望能够对person进行筛选。添加到最后的评论中,选择每天一行特定的person和特定的百分比-类似于此..@iamsearchy-分区方式有点像,而不是group子句。按order by指定的顺序为每行增加行数。分区确定行号何时应再次从1开始。所以,如果您还需要按名称分组,您应该按datediffd、0、EnteredOn、Name等将分区扩展到各个分区,以获得更多需要分组的字段。关于性能,我只能说,您应该使用此处建议的查询运行测试,并选择对您的数据具有最佳性能的查询。非常感谢您的帮助:-
;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
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)