簡體   English   中英

合並數百萬數據庫中的多行

[英]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-032016-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM