0
在rails上使用postgresql和ruby,我想批量處理大型數據庫。我似乎無法使用find_each,因爲它使用最小的id向上。但我需要處理最新的數據,其中最大的ID。使用範圍和訂單的極限和偏移
我現在的嘗試是
score_ok.order(cmp_id: :desc).limit(X).offset(Y).pluck(:id)
其中score_ok是一個範圍與where子句。 如果我試試這個小測試數據庫上,然後用無極限,即偏移
score_ok.order(cmp_id: :desc).pluck(:id)
我看到
[372,362,363,361,366,367,368,369,370, 371,364]
現在,如果我不
score_ok.order(cmp_id: :desc).limit(2).offset(0).pluck(:id)
我得到
[362, 361]
,如果我做
score_ok.order(cmp_id: :desc).limit(2).offset(2).pluck(:id)
我得到
[362, 366]
,但我要的是[372,362],然後[363,361]。我該怎麼做呢?我試圖將limit(2).offset(2)
轉移到查詢的開頭,但這沒有幫助。
這個按'created_at'排序的開始有點誤導。你確定你沒有使用它而不是'comp_id'嗎? – potashin
從開發日誌中,您可以粘貼正在運行的實際SQL嗎?我的猜測是,生成的SQL正在做一些意想不到的事情,這將有助於你理解實際發生的事情。當我面對類似的情況時,我通常最終會使用原始SQL。 – stef
potashin,我正在使用cmp_id(我有問題)但如果我用created_at替換,查詢按預期工作。 cmp_id是日期類型。 stef,明天我會看看原始的sql。 – Obromios