Timescale 支持完整的 SQL,因此您无需学习自定义查询语言。本节包含一些简单的查询,您可以直接在本页面上运行。当您构建完美的查询后,使用复制按钮在您自己的数据库中使用它。
本节中的大多数查询都查找最近四天的数据。这是为了考虑到周末没有股票交易,并确保您始终在结果中获得一些数据。
所有 SQL 查询的主要构建块是 SELECT
语句。它是一个从数据库中选择数据的指令。执行快速的 SELECT
查询通常是您使用新数据库时做的第一件事,只是为了确保您的数据以您期望的方式存储在数据库中。
第一节使用 SELECT
语句来要求您的数据库返回 stocks_real_time srt
表中的每一列(用星号表示),就像这样
SELECT * FROM stocks_real_time srt
如果您的表非常大,您可能不想返回每一行。您可以使用 LIMIT
子句限制返回的行数
LIMIT 10
在命令提示符下,使用您下载的速查表中的
psql
连接字符串连接到您的数据库。在
psql
提示符下,键入此查询。注意
点击下面的“运行查询”,抢先预览结果。这会对 Timescale 策划的实时实例运行 SQL 查询。
SELECT * FROM stocks_real_time srtLIMIT 10;-- Output键入
q
返回到psql
提示符。
在上一节中,您看到了表中的一部分行。通常,您希望对行进行排序,以便看到最新的交易。您可以使用 ORDER BY
语句更改结果的显示方式。
在本节中,您使用 SELECT
查询查询特斯拉的股票,如下所示,它请求来自 stocks_real_time srt
表的所有交易,其中包含 TSLA
代码,并且具有日交易量数据
SELECT * FROM stocks_real_time srtWHERE symbol='TSLA' and day_volume is not null
然后,您添加一个 ORDER BY
语句,按时间降序和日交易量降序对结果进行排序。日交易量显示该股票当天交易的总次数。每发生一次交易,日交易量数字就会增加 1。这是 ORDER BY
语句
ORDER BY time DESC, day_volume desc
最后,要限制结果的数量,您可以再次使用 LIMIT
子句
LIMIT 10
在命令提示符下,使用您下载的速查表中的
psql
连接字符串连接到您的数据库。在
psql
提示符下,键入此查询SELECT * FROM stocks_real_time srtWHERE symbol='TSLA' and day_volume is not nullORDER BY time DESC, day_volume descLIMIT 10;-- Output每秒都有多次交易,但您知道顺序是正确的,因为
day_volume
列已正确排序。
Timescale 具有自定义 SQL 函数,可以帮助您更轻松、更快速地进行时序分析。在本节中,您将了解两个常用的 Timescale 函数:first
用于查找组中的最早值,last
用于查找组中的最新值。
first()
和 last()
函数检索按另一列排序时,一列的第一个和最后一个值。例如,股票数据有一个名为 time
的时间戳列和一个名为 price
的数字列。您可以使用 first(price, time)
获取按递增的 time
列排序时,price
列中的第一个值。
在此查询中,您首先选择最近四天内 stocks_real_time srt
表中每只股票的 first()
和 last()
交易价格
SELECT symbol, first(price,time), last(price, time)FROM stocks_real_time srtWHERE time > now() - INTERVAL '4 days'
然后,您组织结果,以便可以使用 GROUP BY
语句查看每只股票的第一个和最后一个值,并使用 ORDER BY
语句按字母顺序排列,如下所示
GROUP BY symbolORDER BY symbol
有关这些函数的更多信息,请参阅 first() 和 last() 的 API 文档。
在命令提示符下,使用您下载的速查表中的
psql
连接字符串连接到您的数据库。在
psql
提示符下,键入此查询SELECT symbol, first(price,time), last(price, time)FROM stocks_real_time srtWHERE time > now() - INTERVAL '4 days'GROUP BY symbolORDER BY symbolLIMIT 10;-- Output键入
q
返回到psql
提示符。
为了更轻松地查看不同时间范围内的数字,您可以使用 Timescale time_bucket
函数。时间桶用于对数据进行分组,以便您可以对不同的时间段执行计算。时间桶代表时间轴上的特定点,因此单个时间桶中所有数据的时间戳都使用桶时间戳。
在本节中,您使用与上一节相同的查询来查找 first
和 last
值,但首先将数据组织成 1 小时的时间桶。在上一节中,您检索了列的第一个和最后一个值,这次,您检索 1 小时时间桶的第一个和最后一个值。
首先声明要使用的时间桶间隔,并为您的时间桶命名
SELECT time_bucket('1 hour', time) AS bucket,
然后,您可以像之前一样添加查询
first(price,time),last(price, time)FROM stocks_real_time srtWHERE time > now() - INTERVAL '4 days'
最后,使用 GROUP BY
语句按时间桶组织结果,如下所示
GROUP BY bucket
有关时间分桶的更多信息,请参阅时间桶部分。
在命令提示符下,使用您下载的速查表中的
psql
连接字符串连接到您的数据库。在
psql
提示符下,键入此查询SELECT time_bucket('1 hour', time) AS bucket,first(price,time),last(price, time)FROM stocks_real_time srtWHERE time > now() - INTERVAL '4 days'GROUP BY bucket;-- Output键入
q
返回到psql
提示符。注意
当您创建超表时,Timescale 会自动在时间列上创建索引。但是,您通常还需要按其他列过滤时序数据。适当使用索引有助于提高查询性能。有关索引的更多信息,请参阅关于索引的部分
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面。