SELECT * FROM Table1 t1
WHERE t1.referring_url <> 'site.com'
AND EXISTS (
SELECT * FROM Table1 ex
WHERE ex.user_id = t1.user_id
AND ex.referring_url <> 'site.com'
AND ex.stamp < t1.stamp
);
BTW:我改名datetime
到stamp
,因爲它是一個保留字。
更新:如果你只對速度感興趣,你可以做;
SELECT t1.user_id, COUNT(*) AS reet
FROM Table1 t1
WHERE t1.referring_url <> 'site.com'
AND EXISTS (
SELECT * FROM Table1 ex
WHERE ex.user_id = t1.user_id
AND ex.referring_url <> 'site.com'
AND ex.stamp < t1.stamp
)
GROUP BY t1.user_id
;
UPDATE:如果你想與零個reeats用戶也可以使用一個CTE聯接(或子查詢):
WITH cnt AS (
SELECT tx.user_id , COUNT(*) AS cnt
FROM Table1 tx
WHERE tx.referring_url <> 'site.com'
AND EXISTS (
SELECT * FROM Table1 ex
WHERE ex.user_id = tx.user_id
AND ex.referring_url <> 'site.com'
AND ex.stamp < tx.stamp
)
GROUP BY tx.user_id
)
SELECT DISTINCT t1.user_id
, COALESCE(cnt.cnt, 0) AS reet
FROM Table1 t1
LEFT JOIN cnt ON cnt.user_id = t1.user_id
;
爲什麼你張貼ASCII純文本爲圖像。這使得它很難構建你的樣本數據的測試用例。 http://sqlfiddle.com上的例子將是最好的事情。 –
下面是Postgres的小提琴:http://sqlfiddle.com/#!12/39067順便說一句:有了Postgres,沒有必要存儲'row_number',你可以基於'datetime'列實時生成'row_number'。 –
爲什麼不是1,4,5,6? 1行號後離開現場.... – Justin