window-functions - Presto 中的结转值
问题描述
我正在使用以下查询来透视我的数据并生成 CSV,但问题是我有一个数据集,其中数据点以分散的方式与每个时间戳一起出现。
with map_date as (
SELECT
vin,
epoch,
timestamp,
date,
map_agg(signalName, value) as map_values
from hive.vehicle_signals.vehicle_signals_flat
where date(date) = date('2020-03-12')
and date(cast(from_unixtime(epoch) as timestamp) - interval '0' hour) = current_date - interval '2' day
and vin = '000011'
and signalName in ('timestamp','epoch','msgId','usec','vlan','vin','msgName','value')
GROUP BY vin, epoch, timestamp, date
order by timestamp desc
)
SELECT
epoch
, timestamp
, CASE WHEN element_at(map_values, 'value') IS NOT NULL THEN map_values['value'] ELSE NULL END AS value
, vin
, current_date - interval '2' day AS date
from map_date
结果,我得到了以下 CSV。有没有办法可以结转该值,直到在较新的时间戳找到新值?如下图所示,值“14.3”出现,下一个值“16.5”出现在几个时间戳之后,我如何将值“14.3”带到第 7 行并在整个列上重复逻辑。如何使用 Presto 使我的输出字段看起来像图像中的“G”列?
提前致谢!!
解决方案
您可以使用 mysql @variable 来存储最后一个值,例如:
SELECT
epoch
, timestamp
, CASE WHEN element_at(map_values, 'value') IS NOT NULL THEN @last_value:= map_values['value'] ELSE @last_value END AS value
, vin
, current_date - interval '2' day AS date
from map_date, (select @last_value:=0) v
最后一部分,(select @last_value:=0) v
是初始化@last_value
变量。
一个基础教程
https://www.mysqltutorial.org/mysql-variables/
带有附加信息的更高级教程
https://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/
推荐阅读
- html - 如何将渐变颜色应用于按钮的边框?
- google-chrome - 如何在 Chrome 地址栏中显示“安装 Twitter”?
- c# - ToolStripComboBox dont work with font stlye
- julia - Add tag with coordinates to plot in Plots.jl
- python - 用 selenium 和 Python 读出 div 中的类名
- javascript - Angularjs function inside foreach loop not working
- python - Appending csv extracted dataframes in a for loop into a single dataframe
- python - using selenium to get google search results without detection
- r - src/tests/soname.h:1:10:致命错误:找不到“openssl/opensslv.h”文件#include“openssl/opensslv.h”
- html - 如何对齐像网格模板区域这样的 HTML 孙子?