2011-08-25 108 views
1

有人可以幫助我將此sqlite查詢轉換爲postgres查詢嗎?將sqlite轉換爲postgres查詢

SELECT count(*), count(*), date(date, '-'||strftime('%w',date)||' days') as date 
FROM emails as m, contacts as me 
WHERE datetime(date) > datetime('2010-08-25') 
    and datetime(date) < datetime('2011-08-25') 
    and (me.id = m.fr) 
    and me.email like '%gmail.com%' 
GROUP BY date 
ORDER BY date asc 

更新,我找到了答案:

select count(*), (m.date::date - extract(dow from m.date)::int) as dat 
from emails as m join contacts as me on m.fr = me.id 
where m.date > '2010-08-25' 
    and m.date < '2011-08-25' 
    and me.email like '%gmail.com%' 
group by dat 
order by dat 
+0

你在potsgres的日期欄中使用了什麼類型? –

+0

真的有兩個'count(*)'還是一個錯字? –

+0

似乎有兩個'count(*)',不知道爲什麼。日期類型是「帶時區的時間戳」 – locoboy

回答

1

strftime業務是照顧elsewhere,所以我們只需要在這裏整理出datetime(...)的東西,彌補date是一個時間戳。在我來到這裏的時候,我會切換到明確的連接條件(而不是WHERE子句中的隱式連接條件)。

select count(*), count(*), m.date::date - extract(dow from m.date)::int as date 
from emails as m join contacts as me on m.fr = me.id 
where m.date > '2010-08-25' 
    and m.date < '2011-08-25' 
    and me.email like '%gmail.com%' 
group by m.date 
order by m.date asc 

,所以你不需要任何鑄造或重新格式化爲比較的PostgreSQL可以比較自身的ISO8601日期字符串的時間戳。

這兩個count(*)仍然看起來有點讓我感到有趣,但我不知道查詢被使用的上下文,所以重複可能有意義。

+0

由於某些原因,這並不完全。當你說「按日期分組」時,它不會真正對其進行分組並將計數加在一起。 – locoboy

+0

@ cfarm54:你有任何樣本數據和模式嗎?我們有'日期'欄,'日期'功能和'日期'別名; PostgreSQL和SQLite可能會針對各種情況做出不同的選擇。 –

+0

確定'emails'的模式是:'(id整數主鍵自動增量, fr int引用contacts(id),subj文本,日期datetime,mid文本唯一, 回覆文本引用msgs(mid),multipart bool); ' 'contacts'的模式是:'(id INTEGER PRIMARY KEY AUTOINCREMENT, name text,email text not null); '。我也對「日期」這個詞感到困惑。在方法調用和變量之間,它非常混亂:P。 – locoboy