[英]How can i go about creating this complex SQL query?
我有一個看起來像這樣的表:
Table1
:
Time_stamp bigint, << Notice this is bigint and not timestamp, so this needs to be casted
amount int,
name_ev text,
badge_number int,
type text
(我們只想提取type
所在行的信息('customer', 'client')
)
另一個看起來像這樣的表:
Table2
:
timestamp TIMESTAMP,
low int,
high int
(這是按分鍾計算的,所以每分鍾都有一個值低,高)
第三個表格如下所示:
Table3
:
name text,
badge_number text, << Notice this is text and not int, so this needs to be casted
trip_data
(只能有一個名字,一個badge_number,意思是這里沒有騙子)
我試圖拉這個:
timestamp, name, badge_number, highest_Day, lowest_Day, highest_Week, lowest_Week, highest_Month, lowest_Month, trip_data, amount_day, amount_week, amount_month, badge_day, badge_week, badge_month, last_trip_amount, last_trip_time_stamp
解釋:
解釋:
timestamp
: Table1
1 中的時間戳name
: Table1
中的name
badge_number
: Table1
中的badge_number
highest_Day
: Table2
中high
的最大值,其中Table2.timestamp
介於Table1.time_stamp - 1 Day
和Table1.time_stamp
之間lowest_Day
: Table2
中low
的最大值,其中Table2.timestamp
介於Table1.time_stamp - 1 Day
和Table1.time_stamp
之間trip_data
:來自Table3
的trip_data
的值,其中Table3.name
匹配Table1.name_ev
並且Table3.badge_number
匹配Table1_badge_number
amount_day
: Table1.time_stamp
介於Table1.time_stamp - 1 Day
和Table1
之間的所有對象的amount
Table1.time_stamp
badge_day
:與 amount_day 相同,但僅在Table1.badge_number
與Table1.badge_number
匹配且Table1.time_stamp
介於Table1.time_stamp - 1 Day
和Table1.time_stamp
之間的情況下last_trip_amount
:是Table1.amount
的值,其中Table1.name_ev
和Table1.badge_number
匹配記錄name_ev
和badge_number
last_trip_time_stamp
:與上面相同,但不是數量,而是時間戳。 請注意, Table1
未排序,在檢索最后一個 object 時應按時間戳排序(即按 time_stamp desc 限制 1 排序)或其他任何內容。
目標是傳遞一個badge_number
並在上述響應中返回所有記錄(即~15k)。
使用 WITH 子句將大查詢拆分為幾個較小的查詢,您可以命名這些查詢。 每個子查詢只會執行一次,性能應該不成問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.