column_name之前的第n个值。如果使用lag()函数,我们的查询甚至执行得更快——比先前的查
询大约快25%。
select timestamp;
statistic_id;
(counter …prev_counter) *60/
(timestamp …prev_timestamp)
from (select timestamp;
statistic_id;
counter;
lag(counter;1)over(partition bystatistic_id
order bytimestamp) prev_counter;
lag(timestamp; 1)over(partition bystatistic_id
order bytimestamp) prev_timestamp
from hit_counter) a
order bya。timestamp; a。statistic_id
很多时候,我们的数据并不像航班案例中那样具有对称性。通常,当需要查找和最小、最大、
最早、或最近的值相关联的数据时,首先必须找到这些值本身(此为第一遍扫描,需比较记录),
接下来的用这些值作为第二遍扫描的搜索条件。而以滑动窗口(sliding window)为基础的OLAP
函数,可以将两遍扫描合而为一(至少表面上如此)。基于时间戳或日期的数据查询,非常特殊
也非常重要,本章在稍后的“基于日期的简单搜索或范围搜索”中专门讨论。
总结:当多个选取条件用于同一个表的不同记录时,可以使用基于滑动窗口工作的函数。
基于日期的简单搜索或范围搜索
Simple orRange Searchingon Dates
搜索条件有多种,其中日期(和时间)占有特殊地位。日期极为常见,而且比其他数据类型更
可能成为范围搜索的条件,范围搜索可以是有界的(如“在某两天之间”),也可以是部分有界
(“在某天之前”)。通常,为了获得这种结果集,查询需要使用当前日期(如“前六个月”)。
上一节“通过聚合获得结果集”所举的例子,用到了sales_history 表。当时,条件位于amount 上,
其实对于sales_history这种表更常见的是日期条件,尤其是读取特定日期的数据、或读取两个日
期之间的数据。在保存历史数据的表中查找特定日期(或其对应值)时,必须特别注意确定当
前日期的方法,它可能成为聚合条件的基础。
…………………………………………………………Page 73……………………………………………………………
第1章已指出,设计保存历史数据的表颇为困难,而且没有现成的简单解决方案。无论你对当前
数据、还是历史数据感兴趣,设计历史数据的存储方案都要根据如何使用数据决定,同时还要
看数据多快会过时。例如,零售系统中价格的变动速度比较慢(除非正在经受严重的通货膨胀),
而网络流量或财务设备的价格改变速度比较快,甚至快很多。
从宏观角度来看,关键是各项历史数据的数量:是“少量数据项、大量历史数据”,还是“大量数
据项、少量历史数据”,或是介于两者之间?其重点是:数据项的可选择性取决于数据项的总数、
取样频率(“每天一次”还是“每次改变时”)、时间长短(“永久”还是“一年”等)。因此,本节将首
先讨论“大量数据项、少量历史数据”的情况,接着讨论“少量数据项、大量历史数据”的情况,
最后讨论当前值问题。
大量数据项、少量历史数据
ManyItems; Few HistoricalValues
既然没有为每个数据项保留大量历史数据,那么各项的ID可选择性很高。说明要查询哪些项,
限定参与查询的少数历史记录,就可确定特定日期(当前日期或以前日期)对应的值。这种情
况需要我们再次处理聚合值(aggregate value)。
除非建立了代理键(本情况不需要代理键),否则主键通常是复合键,由item_id和record_date组
成。为了查询特定日期的值,可采用两种方法:子查询和 OLAP 函数。
使用子查询
查找某数据项在特定日期的值相对简单,但实际上,这种简单只是假象。通常你会遇到这样的
代码:
select whatever
from hist_data asouter
where outer。item_id =somevalue
andouter。record_date =(select max(inner。record_date)
from hist_data asinner
where inner。item_id =outer。item_id
andinner。record_date
小说推荐
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章
- SQL 21日自学通(V3.0)(PDF格式)
- -Page 1-SQL 21 日自学通(V1.0 翻译人 笨猪目录目录 1译者的话 14第一周概貌 16从这里开始 16
- 其他
- 最新章:第170章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- 深入浅出MFC第2版(PDF格式)
- -Page 1-Page 2-山高月小山高月小 水落石出水落石出山高月小山高月小 水落石出水落石出-Page 3-深入淺出MFC(第版 使用Visual C 5.0 MFC 4.2)Dissecting MFC(Second Edition Using Visual C 5.0 MFC 4.2)侯俊
- 其他
- 最新章:第309章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 其他
- 最新章:第26章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- 电子电路大全(PDF格式)
- -Page 1-电力生产人员技能培训电路基础部分电路基础部分电电路路基基础础部部分分-Page 2-一、电路的基本概念和基本定律-Page 3-考试点1o 1、掌握电阻、独立电压源、独立电流源、11受控源、电容、电感、耦合电感、理想变压器诸元件的定义、性质2o 2、掌握电流、电压参考方向的概念223
- 其他
- 最新章:第353章