使用前一天的getdate选择数据 - 但仅返回前一天而不是之前24小时的数据

时间:2018-01-11 05:00:41

标签: sql-server tsql datetime

我想运行一个查询,显示从午夜开始显示的前一天每小时的平均温度值。

该表的列号为UpdateOn,格式为2018-01-10 13:56:06.000,时间戳为P1Temp,其中包含温度数据。大约每分钟都会在表格中输入数据。

我有以下SQL查询显示数据,但仅限于运行命令之前的24小时。这可以在两个日历日内分割数据,具体取决于命令运行的时间,当我希望它只返回前一天的每小时时,无论命令何时运行。

<script>
var cc = <?php echo $_SESSION['abc'];?>
$(document).ready(function() {
if(cc == "abc"){
  $('.content').load("main.php");}
  else{
  $('.content').load("login.php");}
  }
});</script>

1 个答案:

答案 0 :(得分:1)

MSDN documentation开始,这是今天午夜的表达式:

DATEADD(Day, 0, DATEDIFF(Day, 0, GetDate()))

如果我正确地阅读了您的问题,您希望定位从昨天午夜开始的24小时,但不包括今天午夜。下面的查询几乎与您已有的查询相同,只是WHERE子句强加了您想要的范围。

SELECT
    UpdateOn = DATEADD(hh, DATEPART(hh, UpdateOn),
        CAST(CAST(UpdateOn AS DATE) AS DATETIME)),
    ROUND(AVG(P1Temp), 1)
FROM TABLE
WHERE
    UpdateOn >=
        DATEADD(day, -1, DATEADD(Day, 0, DATEDIFF(Day, 0, GetDate()))) AND
    UpdateOn < DATEADD(Day, 0, DATEDIFF(Day, 0, GetDate()))
GROUP BY
    DATEADD(hh, DATEPART(hh, UpdateOn),
        CAST(CAST(UpdateOn AS DATE) AS DATETIME));