测量两个数组以确定最低数字的相等性

时间:2015-11-27 02:59:37

标签: sql

我有以下SQL表:

 create table events (
  sensor_id integer not null,
  event_type integer not null,
  value integer not null,
  time timestamp unique not null
 );

它看起来像这样:

 sensor_id  | event_type | value      | time


 -----------+------------+------------+--------------------
  2          | 2          | 5          | 2014-02-13 12:42:00
  2          | 4          | -42        | 2014-02-13 13:19:57
  2          | 2          | 2          | 2014-02-13 14:48:30
  3          | 2          | 7          | 2014-02-13 12:54:39
  2          | 3          | 54         | 2014-02-13 13:32:36

通过sensor_id和event_type返回最新值的最简单方法是什么?所以它看起来像这样:

sensor_id  | event_type | value


-----------+------------+-----------
  2          | 2          | 2
  2          | 3          | 54
  2          | 4          | -42
  3          | 2          | 7

我无法理解它

3 个答案:

答案 0 :(得分:2)

尝试下面的t-sql代码:

SELECT e.sensor_id, e.event_type, e.value
FROM
    (SELECT e.sensor_id, time = MAX(e.time)
      FROM dbo.events e WITH(NOLOCK)
      GROUP BY e.sensor_id, e.event_type) m
    JOIN dbo.events e WITH(NOLOCK) ON e.sensor_id = m.sensor_id
        AND e.time = m.time
ORDER BY e.sensor_id

你如何排序行?似乎无法看到这种模式。

编辑:现在进行排序!

SELECT e.sensor_id, e.event_type, e.value
FROM
    (SELECT e.sensor_id, time = MAX(e.time)
      FROM dbo.events e WITH(NOLOCK)
      GROUP BY e.sensor_id, e.event_type) m
    JOIN dbo.events e WITH(NOLOCK) ON e.sensor_id = m.sensor_id
        AND e.time = m.time
ORDER BY e.sensor_id, e.sensor_id + e.event_type

答案 1 :(得分:1)

一种方法是:

SELECT value FROM events WHERE sensor_id=? AND event_type=? ORDER BY time DESC

然后第一个是最新的。

数据库有时可能会将您限制为只有一个,具体取决于您想要的数据库。

我在问号上放了一个数字。

答案 2 :(得分:0)

SELECT 
    sensor_id, event_type, value
FROM
(
    SELECT 
        ROW_NUMBER() OVER 
            (PARTITION BY sensor_id, event_type ORDER BY time DESC) AS Ordering, 
        * 
    FROM events
) data
WHERE
    data.Ordering = 1