SQL Time如何查找最后一条记录但只返回一条记录

时间:2015-08-08 20:24:04

标签: c# sql asp.net sql-server-2008-r2

我怎么做这个说我有一堆寄存器,他们有一个终端id = 4741,我只想要那天的最后一条记录。我正在使用SQL Server 2008 R2。

home.html

但是说上面的查询返回以下内容我只想要最后一次19:57:58一个我认为顺序就足够但它只是按升序给我带来。

SELECT TOP 1000 
    [id]
    ,[data_atualizacao]
    ,[direcao]   
    ,[velocidade]
    ,[latitude]
    ,[longitude]
    ,[nivel_bateria]
    ,[enum_status_gps]
    ,[id_terminal]
FROM 
    [TecnologiaGPS_V2].[dbo].[posicao_historico_terminal_82015]
WHERE
    id_terminal = 4741
ORDER BY 
    data_atualizacao ASC

这就是我在c#

中获取数据的方式
 id_terminal 19:57:05
 id_terminal 19:57:15
 id_temminal 19:57:58

所以我的问题是如何获取最新的时间戳,并且当我将分页600万条记录时,我的代码也足够了。即使我总是将终端ID传递给查询。

4 个答案:

答案 0 :(得分:0)

select 
    [id], [data_atualizacao], [direcao], [velocidade], 
    [latitude], [longitude], [nivel_bateria], 
    [enum_status_gps],[id_terminal]
from 
    (select
         [id],
         row_number() over(partition by id order by data_atualizacao desc) rn,
         [data_atualizacao], [direcao], [velocidade],
         [latitude], [longitude], [nivel_bateria],
         [enum_status_gps], [id_terminal]
     from  
         [TecnologiaGPS_V2].[dbo].[posicao_historico_terminal_82015]
     where 
         id_terminal = 4741) t
where 
    t.rn = 1

您可以使用row_number窗口函数获取每个ID的最新记录。

答案 1 :(得分:0)

Select top 1 * 
from TecnologiaGPS_V2 
where id_terminal = 4741 
order by data_atualizacao desc

答案 2 :(得分:0)

您也可以使用和汇总数据,而不是对数据进行排序。

SELECT *
FROM 
    [TecnologiaGPS_V2].[dbo].[posicao_historico_terminal_82015]
WHERE
    id_terminal = 4741
AND data_atualizacao = (SELECT MAX (data_atualizacao) FROM [TecnologiaGPS_V2].[dbo].[posicao_historico_terminal_82015] as subquery 
WHERE id_terminal = subquery.id_terminal)

执行订单可能会导致数据库服务器的额外工作。根据数据集大小,排序可能非常昂贵。虽然您也可以依赖索引来保持为您排序,但您将支付索引维护费用。 Sql server擅长聚合,这可能总体上表现更好。此外,根据您的表定义,您可以保证1行。

答案 3 :(得分:0)

从tablename中选择top 1 *,其中[condition] order by [column] desc;

检查逐个运行每个查询。

SELECT * FROM订单,其中EmployeeID = 4;

SELECT前1 * FROM订单,其中EmployeeID = 4 order by OrderDate desc;

in

http://www.w3schools.com/sql/trysql.asp?filename=trysql_func_first&ss=-1