[英]Combine multiple rows in database of millions
我有一個包含數百萬行的表,其結構如下:
UserID | Date | Points
1 | 2016-05-01 | 240
1 | 2016-05-02 | 500
1 | 2016-05-03 | 650
2 | 2016-05-01 | 122
2 | 2016-05-02 | 159
2 | 2016-05-03 | 290
等等等等。
我需要找到每個ID在2016-05-03
和2016-05-01
之間的Points
差異,按該Points
差異排序,然后返回最高的〜100。 我的數據庫包含數億行,因此需要快速進行操作。
我將從哪里開始? 我一直在group_concat
但不確定該用例的正確功能。
該查詢正在運行,雖然速度不是很快,但是可以進行。
select tbl.id as UserId, ((select t.points from tbl t where date = '2016-05-03' and t.id=tbl.id)-(select t.points from tbl t where date = '2016-05-01' and t.id=tbl.id)) as diff from tbl group by id order by diff limit 100;
運行此命令,讓我知道這是否需要花費很多時間。
您應該有如下子查詢
SELECT
user_id,
(select points from tbl_test where tbl_test.date_of='2016-05-03' and user_id=t1.user_id)-t1.points as difference_in_points
FROM `tbl_test` as t1
WHERE date_of='2016-05-01' order by difference_in_points desc
limit 100
自己加入桌子。
SELECT t1.user_id, t1.points - t2.points as diff
FROM yourTable AS t1
JOIN yourTable AS t2 ON t1.user_id = t2.user_id
WHERE t1.date = '2016-05-03'
AND t2.date = '2016-05-01'
ORDER BY diff DESC
LIMIT 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.