sqlite SQL循环另一个表中的值

iqih9akk  于 2023-05-07  发布在  SQLite
关注(0)|答案(1)|浏览(176)

我需要从Trades表中选择每个ticker的最后40行。我可以用python循环它们。它可以工作,但会有太多的查询。我正在寻找一种方法来做到这一点在一个单一的查询。
下面是我的SQL查询:

SELECT ticker, count(ticker)
FROM (SELECT * from Trades WHERE ticker = '<this_will_be_replaced>' ORDER BY timestamp DESC LIMIT 40)
WHERE trade = 'buy'
GROUP BY ticker

股票代码:
| 身份证|自动收报机|
| --------------|--------------|
| 0| btcusd|
| 1|埃图什德|
行业:
| 身份证|自动收报机|数量|价格|时间戳|贸易|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 0| btcusd| 0.5|二万九千|1681901482|购买|
| 1| btcusd| 0.2|二万九千五百|1681901483|出售|
| 二|btcusd| 0.3| 29400| 1681901484|购买|
| 三|btcusd| 0.1| 29700|电话:1681901485|购买|
我尝试过使用内部连接,但它没有像我预期的那样工作。

SELECT ticker, count(ticker)
FROM (SELECT * from Trades tr INNER JOIN Tickers tk ON tk.ticker = tr.ticker ORDER BY tr.timestamp DESC LIMIT 40)
WHERE trade = 'buy'
GROUP BY ticker
uz75evzq

uz75evzq1#

使用common table expression(或CTE)和ROW_NUMBER()window function

WITH RankedTrades AS (
    SELECT
        tr.ticker,
        tr.trade,
        ROW_NUMBER() OVER (PARTITION BY tr.ticker ORDER BY tr.timestamp DESC) AS row_num
    FROM
        Trades tr
)
SELECT
    ticker,
    COUNT(trade) AS buy_count
FROM
    RankedTrades
WHERE
    trade = 'buy'
    AND row_num <= 40
GROUP BY
    ticker;

相关问题