Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 如何获取每天的最后读数_Sql_Sql Server - Fatal编程技术网

Sql 如何获取每天的最后读数

Sql 如何获取每天的最后读数,sql,sql-server,Sql,Sql Server,我有一个DB表,其中不断添加数据。添加的数据是传感器数据,因此每个传感器每小时有两个读数。我想知道一种方法,只获取整个月当天的最后读数。比如说, select * from dbo.NewLogTable where Sensor_ID= '12345'and Date_Reading between '2012-08-01' and '2012-08-31' and DateTimeStamp between '23:30:00'and '23:59:00' order by DateTim

我有一个DB表,其中不断添加数据。添加的数据是传感器数据,因此每个传感器每小时有两个读数。我想知道一种方法,只获取整个月当天的最后读数。比如说,

select * from dbo.NewLogTable
where Sensor_ID= '12345'and Date_Reading between '2012-08-01' and '2012-08-31' 
and DateTimeStamp between '23:30:00'and '23:59:00'
order by DateTimeStamp asc

我知道这不起作用,但这是我想要的伪代码。同样,这里的目标是每天只获得一个特定传感器的读数(最新)。我见过很多例子,其中显示了一个月的第一天和最后一天,显示过去x天的数量,等等。这与我的应用程序不太一样。有人能帮忙吗?谢谢

您可以使用聚合,即
MAX()
来处理此问题。以下是MSDN:

返回表达式中的最大值。之后可能是 超过条款

您的查询将导致:

SELECT SensorID, MAX(Date_reading) FROM NewLogTable GROUP BY Sensor_ID

您可以使用聚合,即
MAX()
来处理此问题。以下是MSDN:

返回表达式中的最大值。之后可能是 超过条款

您的查询将导致:

SELECT SensorID, MAX(Date_reading) FROM NewLogTable GROUP BY Sensor_ID

您可以使用
row\u number()
窗口功能来实现这一点

select * from
(
    select 
        *, 
        row_number() over (partition by date_reading order by datetimestamp desc) rn 
    from yourtable
) v
where rn = 1

您可以使用
row\u number()
窗口功能来实现这一点

select * from
(
    select 
        *, 
        row_number() over (partition by date_reading order by datetimestamp desc) rn 
    from yourtable
) v
where rn = 1

您可以将
DATEPART
功能与
MAX
结合使用,以获取整个月份当天的读数:

SELECT DATEPART(d, Date_Reading) AS day, MAX(value) AS value FROM table
WHERE Sensor_ID = '12345' 
    AND Date_Reading BETWEEN '2012-08-01' AND '2012-08-31 23:59:59'
GROUP BY DATEPART(d, Date_Reading)

只需确保您的
BETWEEN
的结束值有一个时间部分。

您可以将
DATEPART
功能与
MAX
结合使用,以获取整个月份的当天读数:

SELECT DATEPART(d, Date_Reading) AS day, MAX(value) AS value FROM table
WHERE Sensor_ID = '12345' 
    AND Date_Reading BETWEEN '2012-08-01' AND '2012-08-31 23:59:59'
GROUP BY DATEPART(d, Date_Reading)
SELECT TOP  1 * 
FROM dbo.NewLogTable
WHERE Sensor_ID = '12345'
AND Date_Reading <= '2012-08-01'
ORDER BY DateTimeSTap DESC 
只需确保您的
中间的
的结束值有一个时间部分。

选择TOP 1*
SELECT TOP  1 * 
FROM dbo.NewLogTable
WHERE Sensor_ID = '12345'
AND Date_Reading <= '2012-08-01'
ORDER BY DateTimeSTap DESC 
从dbo.NewLogTable 其中传感器标识='12345' 和日期读取
选择前1*
从dbo.NewLogTable
其中传感器标识='12345'

Date_Reading感谢大家的快速回复。我非常感谢每一个答案。所有这些都很好,但我更喜欢@Dems soulution。再次感谢大家。感谢大家的快速回复。我非常感谢每一个答案。所有这些都很好,但我更喜欢@Dems soulution。再次感谢大家。