@@ -9,107 +9,55 @@ arrayFilter(x -> x != '', {contract:Array(String)}) AS contracts,
99(length(from_addresses) > 0 ) AS has_from,
1010(length(to_addresses) > 0 ) AS has_to,
1111(length(contracts) > 0 ) AS has_contract,
12- has_contract AND NOT has_from AND NOT has_to AS is_contract_only,
13- has_from AND NOT has_to AND NOT has_contract AS is_from_only,
14- has_to AND NOT has_from AND NOT has_contract AS is_to_only,
15- has_contract AND has_to AND NOT has_from AS is_contract_to,
16- has_contract AND has_from AND NOT has_to AS is_contract_from,
17- has_contract AND has_from AND has_to AS is_contract_from_to,
18- {start_time:UInt64} = 1420070400 AS no_start_time,
19- {end_time:UInt64} = 2524608000 AS no_end_time,
20- {start_block:UInt64} = 0 AS no_start_block,
21- {end_block:UInt64} = 9999999999 AS no_end_block,
2212
2313tx_hash_timestamps AS (
2414 SELECT (minute, timestamp )
2515 FROM trc20_transfer
2616 WHERE has_tx_hash AND tx_hash IN {transaction_id:Array(String)}
2717 GROUP BY minute, timestamp
2818),
29- /* single filters */
19+ /* minute filters */
3020from_minutes AS (
3121 SELECT minute
3222 FROM trc20_transfer
33- WHERE
34- is_from_only
35- AND (no_start_time OR minute >= toRelativeMinuteNum(toDateTime({start_time:UInt64})))
36- AND ` from` IN {from_address:Array(String)}
23+ WHERE has_from AND ` from` IN {from_address:Array(String)}
3724 GROUP BY minute
3825),
3926to_minutes AS (
4027 SELECT minute
4128 FROM trc20_transfer
42- WHERE
43- is_to_only
44- AND (no_start_time OR minute >= toRelativeMinuteNum(toDateTime({start_time:UInt64})))
45- AND ` to` IN {to_address:Array(String)}
46- GROUP BY minute
47- ),
48- contract_hours AS (
49- SELECT toStartOfHour(toDateTime(minute * 60 )) AS minute_hour
50- FROM trc20_transfer
51- WHERE
52- is_contract_only
53- AND (no_start_time OR minute >= toRelativeMinuteNum(toDateTime({start_time:UInt64})))
54- AND log_address IN {contract:Array(String)}
55- GROUP BY minute_hour
56- ),
57- /* 2 filters */
58- contract_from_minutes AS (
59- SELECT minute
60- FROM trc20_transfer
61- WHERE
62- is_contract_from
63- AND log_address IN {contract:Array(String)}
64- AND ` from` IN {from_address:Array(String)}
29+ WHERE has_to AND ` to` IN {to_address:Array(String)}
6530 GROUP BY minute
6631),
67- contract_to_minutes AS (
32+ contract_minutes AS (
6833 SELECT minute
6934 FROM trc20_transfer
70- WHERE
71- is_contract_to
72- AND log_address IN {contract:Array(String)}
73- AND ` to` IN {to_address:Array(String)}
74- GROUP BY minute
75- ),
76- /* 3 filters */
77- contract_from_to_minutes AS (
78- SELECT minute
79- FROM trc20_transfer
80- WHERE
81- is_contract_from_to
82- AND log_address IN {contract:Array(String)}
83- AND ` from` IN {from_address:Array(String)}
84- AND ` to` IN {to_address:Array(String)}
35+ WHERE has_contract AND log_address IN {contract:Array(String)}
36+ AND ({start_time:UInt64} = 1420070400 OR timestamp >= toRelativeMinuteNum(toDateTime({start_time:UInt64})))
37+ AND ({end_time:UInt64} = 2524608000 OR timestamp <= toRelativeMinuteNum(toDateTime({end_time:UInt64})))
8538 GROUP BY minute
39+ ORDER BY minute DESC
40+ LIMIT 100000
8641),
8742transfers AS (
88- SELECT * , toStartOfHour(toDateTime(minute * 60 )) AS minute_hour
43+ SELECT *
8944 FROM trc20_transfer
9045 WHERE
9146 /* filter by timestamp and block_num early to reduce data scanned */
92- (no_start_time OR timestamp >= toDateTime({start_time:UInt64}))
93- AND (no_end_time OR timestamp <= toDateTime({end_time:UInt64}))
94- AND (no_start_block OR block_num >= {start_block:UInt64})
95- AND (no_end_block OR block_num <= {end_block:UInt64})
47+ ({start_time:UInt64} = 1420070400 OR timestamp >= toDateTime({start_time:UInt64}))
48+ AND ({end_time:UInt64} = 2524608000 OR timestamp <= toDateTime({end_time:UInt64}))
49+ AND ({start_block:UInt64} = 0 OR block_num >= {start_block:UInt64})
50+ AND ({end_block:UInt64} = 9999999999 OR block_num <= {end_block:UInt64})
9651
9752 /* minute-based filters bound to single/double/triple mode */
9853
9954 /* transaction ID filter */
10055 AND ( NOT has_tx_hash OR (minute, timestamp ) IN tx_hash_timestamps AND tx_hash IN {transaction_id:Array(String)} )
10156
102- /* 3-filters: from + to + contract */
103- AND ( NOT is_contract_from_to OR minute IN contract_from_to_minutes )
104-
105- /* 2-filters: (from + contract) and (to + contract) */
106- AND ( NOT is_contract_from OR minute IN contract_from_minutes )
107- AND ( NOT is_contract_to OR minute IN contract_to_minutes )
108-
109- /* 1-filter: from OR to OR contract alone */
110- AND ( NOT is_from_only OR minute IN from_minutes )
111- AND ( NOT is_to_only OR minute IN to_minutes )
112- AND ( NOT is_contract_only OR minute_hour IN contract_hours )
57+ /* minute filters */
58+ AND ( NOT has_from OR minute IN from_minutes )
59+ AND ( NOT has_to OR minute IN to_minutes )
60+ AND ( NOT has_contract OR minute IN contract_minutes )
11361
11462 /* direct filters */
11563 AND ( NOT has_from OR ` from` IN {from_address:Array(String)} )
0 commit comments