【问题标题】:Query for last measurement查询最后一次测量
【发布时间】:2016-03-30 10:08:43
【问题描述】:

我已经为 SQL 查询争取了很多天来获取表的最新条目。 这是关于测量的。因此,您的个人资料有表 1 (S_QOS_DATA),而混乱结果则有表 2 (RN_QOS_DATA)。 现在我想要一个查询来从每个 Profile 中获取最新的测量值及其值。

我已经尝试了很多东西。

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 身份
ci_metric_id 12 varchar
qos_def_id 4 整数
创建了 93 个小日期时间
校验和 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
采样时间 93 日期时间
样本值 2 数值
samplemax 2 个数字
nim_origin 12 nvarchar
修饰符 12 varchar
采样率 2 数值

RN_QOS_DATA_0012:
table_id 4 整数
采样时间 93 日期时间
样本值 2 数值
samplestdev 2 数字
采样率 2 数字
tz_offset 4 int

【问题讨论】:

  • 请以declare @RN_QOS_DATA_0012 table ( Column1 int primary key not null, Column2 nvarchar(10), ColumnX datetime2 not null .... )然后insert into @RN_QOS_DATA_0012 (Column1, Column2, ColumnX) values (0...的形式提供一些示例数据
  • 要获得准确的答案,您需要提供两个表的架构、这些表中的示例数据以及您希望从查询中获得的示例

标签: sql sql-server


【解决方案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

【讨论】:

  • 首先谢谢你。我试过了,但仍然需要查询中的列样本值。
  • @Jessi 好的,这个问题不是很清楚。现已收录
【解决方案2】:

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

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

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

有效。

可以在http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial找到教程

因此,内部查询根据所需的其他字段确定最准确的采样时间,然后外部查询连接相关的其他数据。

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2013-09-12
    • 2020-04-26
    • 2021-10-07
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多