我目前正試圖通過將2個查詢合併爲一個來減少發送到我的RedShift集羣的sql查詢的總數。
減少SQL查詢的總數
這是我的情況。
- 給定卡號範圍,確定該範圍內的哪些卡昨天有交易。
- 對於這些卡片中的每一張,確定它們最後記錄的交易(如果有的話)。
這裏是我的電流,緩慢的,但正確的做法:
query1 = '''SELECT card_no, timestamp, code_one, transaction_amount
FROM table1
WHERE card_no BETWEEN %s AND %s
AND code_one = 202
AND code_two = 0
AND timestamp < date_trunc('day', CURRENT_DATE)
AND timestamp >= (CURRENT_DATE - INTERVAL '1 days')
ORDER BY card_no, timestamp DESC''' % (card_from, card_to)
query2 = '''SELECT * FROM table2 WHERE card_number = %s
ORDER BY transaction_date DESC LIMIT 1''' % card_no
這種方法產生正確的輸出。
Query1首先運行並根據不同的範圍創建事務文件。
然後,我在這些文件中的每個card_no上運行query2並執行一些邏輯操作以獲得我的最終輸出。
我的數據集現在包含4000多個卡片範圍,每個卡片範圍都返回30到100張包含交易的卡片。查詢數量迅速增加,超出了我的控制範圍。
有沒有一種方法可以將這兩個查詢合併爲一個,以大大減少查詢的總數量?
謝謝你的時間。
從'table1左連接table2 ON table1.card_no = table2.card_number'不知道爲什麼不能爲你做正確的事情?如果你這樣做,你可以在一個查詢中得到你所需要的。 – 2014-10-30 16:15:50
你是否有這兩張桌子之間的關係..如果你有,你可以簡單地加入他們與左加入 – 2014-10-30 16:22:56
這不幸的是不起作用。我只是想追加到查詢1的結果,查詢2的結果,但由於查詢2取決於查詢1,我似乎無法找到圍繞它的邏輯。 – Zihs 2014-10-30 16:30:05