表 meas_point :
表边:
表 meas_point_data :
表 edge_meas_point :
示例数据:
meas_point (ID,名称):
边缘(ID,名称):
edge_meas_point (id,edge_id,meas_point_id,顺序):
meas_point_data (id,meas_point_id,日期,值):
想法
表edge_meas_point以给定的优先级(顺序)将edge与meas_point合并。如果在第1阶的测量点没有数据,则应采用第2阶,依此类推。例如:
SELECT TOP 1 d.date, d.value
FROM meas_point_data AS d, edge_meas_point AS em
WHERE
em.meas_point_id=d.meas_point_id AND
em.edge_id=1 AND
d.date=2018-12-21
ORDER BY em.order
在WHERE中可以很好地工作一个日期,但是如果我想从该数据绘制图表怎么办?根据此示例,我的选择应返回:
在我的实际情况中,日期是datetime-每15分钟一次。而且我必须获取上个月的数据..这得到(60/15)* 24 * 30 = 2880点,我必须在一张图表上画几条边。那么如何有效地做到这一点呢? (我必须使用MS SQL)
答案 0 :(得分:1)
如果我的理解正确,您似乎希望SELECT DISTINCT d.date,
FIRST_VALUE(d.value) OVER (PARTITION BY d.date ORDER BY em.order)
FROM meas_point_data d JOIN
edge_meas_point em
ON em.meas_point_id = d.meas_point_id
WHERE em.edge_id = 1;
具有某种“第一”逻辑。但是,由于没有“第一”聚合功能,因此可以使用窗口功能:
<style name="PopupMenu" parent="Theme.AppCompat.Light">
<item name="android:popupBackground">@android:color/white</item>
</style>