Timescale 支持完整的 SQL,因此您无需学习自定义查询语言。本节包含一些简单的查询,您可以直接在本页面上运行。当您构建完美的查询后,使用复制按钮在您自己的数据库中使用它。

本节中的大多数查询都查找最近四天的数据。这是为了考虑到周末没有股票交易,并确保您始终在结果中获得一些数据。

所有 SQL 查询的主要构建块是 SELECT 语句。它是一个从数据库中选择数据的指令。执行快速的 SELECT 查询通常是您使用新数据库时做的第一件事,只是为了确保您的数据以您期望的方式存储在数据库中。

第一节使用 SELECT 语句来要求您的数据库返回 stocks_real_time srt 表中的每一列(用星号表示),就像这样

SELECT * FROM stocks_real_time srt

如果您的表非常大,您可能不想返回每一行。您可以使用 LIMIT 子句限制返回的行数

LIMIT 10
  1. 在命令提示符下,使用您下载的速查表中的 psql 连接字符串连接到您的数据库。

  2. psql 提示符下,键入此查询。

    注意

    点击下面的“运行查询”,抢先预览结果。这会对 Timescale 策划的实时实例运行 SQL 查询。

    SELECT * FROM stocks_real_time srt
    LIMIT 10;
    -- Output
  3. 键入 q 返回到 psql 提示符。

在上一节中,您看到了表中的一部分行。通常,您希望对行进行排序,以便看到最新的交易。您可以使用 ORDER BY 语句更改结果的显示方式。

在本节中,您使用 SELECT 查询查询特斯拉的股票,如下所示,它请求来自 stocks_real_time srt 表的所有交易,其中包含 TSLA 代码,并且具有日交易量数据

SELECT * FROM stocks_real_time srt
WHERE symbol='TSLA' and day_volume is not null

然后,您添加一个 ORDER BY 语句,按时间降序和日交易量降序对结果进行排序。日交易量显示该股票当天交易的总次数。每发生一次交易,日交易量数字就会增加 1。这是 ORDER BY 语句

ORDER BY time DESC, day_volume desc

最后,要限制结果的数量,您可以再次使用 LIMIT 子句

LIMIT 10
  1. 在命令提示符下,使用您下载的速查表中的 psql 连接字符串连接到您的数据库。

  2. psql 提示符下,键入此查询

    SELECT * FROM stocks_real_time srt
    WHERE symbol='TSLA' and day_volume is not null
    ORDER BY time DESC, day_volume desc
    LIMIT 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 srt
WHERE time > now() - INTERVAL '4 days'

然后,您组织结果,以便可以使用 GROUP BY 语句查看每只股票的第一个和最后一个值,并使用 ORDER BY 语句按字母顺序排列,如下所示

GROUP BY symbol
ORDER BY symbol

有关这些函数的更多信息,请参阅 first()last() 的 API 文档。

  1. 在命令提示符下,使用您下载的速查表中的 psql 连接字符串连接到您的数据库。

  2. psql 提示符下,键入此查询

    SELECT symbol, first(price,time), last(price, time)
    FROM stocks_real_time srt
    WHERE time > now() - INTERVAL '4 days'
    GROUP BY symbol
    ORDER BY symbol
    LIMIT 10;
    -- Output
  3. 键入 q 返回到 psql 提示符。

为了更轻松地查看不同时间范围内的数字,您可以使用 Timescale time_bucket 函数。时间桶用于对数据进行分组,以便您可以对不同的时间段执行计算。时间桶代表时间轴上的特定点,因此单个时间桶中所有数据的时间戳都使用桶时间戳。

在本节中,您使用与上一节相同的查询来查找 firstlast 值,但首先将数据组织成 1 小时的时间桶。在上一节中,您检索了列的第一个和最后一个值,这次,您检索 1 小时时间桶的第一个和最后一个值。

首先声明要使用的时间桶间隔,并为您的时间桶命名

SELECT time_bucket('1 hour', time) AS bucket,

然后,您可以像之前一样添加查询

first(price,time),
last(price, time)
FROM stocks_real_time srt
WHERE time > now() - INTERVAL '4 days'

最后,使用 GROUP BY 语句按时间桶组织结果,如下所示

GROUP BY bucket

有关时间分桶的更多信息,请参阅时间桶部分

  1. 在命令提示符下,使用您下载的速查表中的 psql 连接字符串连接到您的数据库。

  2. psql 提示符下,键入此查询

    SELECT time_bucket('1 hour', time) AS bucket,
    first(price,time),
    last(price, time)
    FROM stocks_real_time srt
    WHERE time > now() - INTERVAL '4 days'
    GROUP BY bucket;
    -- Output
  3. 键入 q 返回到 psql 提示符。

    注意

    当您创建超表时,Timescale 会自动在时间列上创建索引。但是,您通常还需要按其他列过滤时序数据。适当使用索引有助于提高查询性能。有关索引的更多信息,请参阅关于索引的部分

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面