查询最后一次测量

时间:2016-03-30 10:08:44

标签: sql sql-server

我已经花了很多天来进行SQL查询以获取表的最新条目。 这是关于测量的。因此,您的个人资料有表1(S_QOS_DATA),而表2(RN_QOS_DATA)表示结果。 现在我想要一个查询从每个配置文件中获取最新的测量值及其值。

我已经尝试了很多东西。

函数last()在MS SQL中不可用,所以我必须使用last_value并且我遇到很多问题。

SELECT rn.table_id, d.robot, d.target, max(rn.sampletime) as "Letzte Messung",
       last_value(rn.sampletime) over (PARTITION by rn.table_id order by rn.sampletime DESC )
FROM RN_QOS_DATA_0012 as rn,
     S_QOS_DATA as d  
WHERE d.table_id = rn.table_id    
  AND target not LIKE 'QS_%'  
  AND target not LIKE 'TEST_%'  
  AND target not LIKE 'ENTW_%'   
  AND target not LIKE '%Ctrl%' 
  AND target not LIKE '%Arbeitsplatzaufbau%'   
  AND target not LIKE 'RT_%' 
  --and rn.samplevalue is not NULL 
  AND target LIKE '%gesamt%' 
group by d.robot, d.target, rn.table_id, rn.sampletime
order by max(rn.sampletime)

有人能帮助我吗?!

S_QOS_DATA:
table_id 4 int identity
ci_metric_id 12 varchar
qos_def_id 4 int
创建了93 smalldatetime
校验和12 varchar
qos 12 varchar
来源12 nvarchar
目标12 nvarchar
主持人12 nvarchar
起源12 nvarchar
机器人12 nvarchar
探头12 varchar
r_table 12 varchar
h_table 12 varchar
v_table 12 varchar
sampletime 93 datetime
samplevalue 2数字
samplemax 2数字
nim_origin 12 nvarchar
修饰符12 varchar
samplerate 2数字

RN_QOS_DATA_0012:
table_id 4 int
sampletime 93 datetime
samplevalue 2数字
samplestdev 2数字
samplerate 2数字
tz_offset 4 int

2 个答案:

答案 0 :(得分:1)

试试这个:

;WITH CTE as
(
  SELECT 
    rn.table_id, 
    d.robot, 
    d.target, 
    rn.sampletime,
    rank() over (PARTITION by rn.table_id order by rn.sampletime DESC ) rownum,
    rn.samplevalue
  FROM RN_QOS_DATA_0012 as rn,
  JOIN
       S_QOS_DATA as d  
  ON
       d.table_id = rn.table_id    
  WHERE 
    target not LIKE 'QS_%'  
    AND target not LIKE 'TEST_%'  
    AND target not LIKE 'ENTW_%'   
    AND target not LIKE '%Ctrl%' 
    AND target not LIKE '%Arbeitsplatzaufbau%'   
    AND target not LIKE 'RT_%' 
    AND target LIKE '%gesamt%' 
)
SELECT 
  table_id, 
  robot, 
  target, 
  sampletime,
  samplevalue
FROM CTE
WHERE rownum = 1
GROUP BY
  robot, target, table_id, sampletime, samplevalue
ORDER BY
  sampletime

答案 1 :(得分:0)

通常这不能在一个查询中完成 - 您需要2个队列。首先确定最准确的采样时间,然后将其与数据相结合。

现在,您可以在一个sql语句中执行这两个查询,因为您实际上可以使用SELECT子句而不是表名。

SELECT * FROM A,(SELECT ....)为B

有效。

可以在http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial

找到教程

因此,内部查询确定按所需其他字段分组的最准确的采样时间,然后外部查询加入相关的其他数据。