簡體   English   中英

mysql查詢以查找具有范圍內5個或更多連續記錄的行

[英]mysql query to find rows with 5 or more consecutive records in a range

我有一種情況,我必須在前10個記錄中標識5個或更多連續記錄。 我在下面給出了2個示例:

示例1如下

SL  User       Number   Frequency
1   aaa         9.95    1
2   aaa         9.85    1
3   aaa         9.75    1
4   aaa         9.65    1
5   aaa         9.55    1
6   aaa         9.45    1
7   xxxx        9.35    1
8   bbbb        9.25    1
9   cccc        9.15    1

我想要一個可以獲取記錄5和6(屬於用戶aaa的數字9.55和9.45,並將頻率更新為2而不是1)的查詢。

示例2如下

SL  User    Number  Frequency
1   xxxx     9.95   1
2   aaa      9.85   1
3   aaa      9.75   1
4   aaa      9.65   1
5   aaa      9.55   1
6   aaa      9.45   1
7   xxxx     9.35   1
8   bbbb     9.25   1
9   cccc     9.15   1

該查詢應僅提取記錄6(屬於用戶aaa的編號9.45,並將頻率更新為2而不是1)。

該查詢應選擇一條記錄,其中5條或更多條連續記錄出現在用戶的前9個位置中的任何位置,並將第4個位置之后的位置的頻率標記為2。

約束:該查詢每2秒通過php中的ajax執行一次。 因此,我真的不希望使用大量cpu的復雜聯接/聯合查詢。 我可以選擇在php中執行此操作,方法是分解為2個或更多個較小的查詢,但更喜歡不加載cpu或數據庫的單個查詢。 如果單個查詢可能會加載cpu,我可以處理2-3個查詢,因為php中會進行處理。

能否請您告知如何實現?

如果僅是前10條記錄,那么PHP解決方案就不會那么費勁。

$arr= mysql result arrays;
$old_user="";
$count=0;
foreach ($arr as $a){
    if ($a['name']==$old_user){
       $count++;
    }else{
       $count=0;
    }
    if ($count > 4) {
        // run the update query here

    }
    $old_user=$a['name'];
}

看看它是否適合您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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