2017-08-31 195 views
0

我有一個數據庫表的格式如下幾行的行:計算數量的不同

id | date | position | change_id 
1 | 2013-05-14 | 1 | 1 
2 | 2013-05-14 | 2 | 2 
3 | 2013-05-14 | 2 | 3 

4 | 2013-05-15 | 2 | 1 <--- changed from prev day 
5 | 2013-05-15 | 1 | 2 <--- changed from prev day 
6 | 2013-05-15 | 2 | 3 

7 | 2013-05-16 | 2 | 1 <--- not changed from prev day 
8 | 2013-05-16 | 1 | 2 <--- not changed from prev day 
9 | 2013-05-16 | 2 | 3 <--- not changed from prev day 

什麼我希望做的是計算有多少排在position列的條款已修改在這兩個日期之間已經發生,即在該示例中,我想獲得position2013-05-162013-05-15之間不同的次數。該值將爲0,因爲position值未更改。

但是如果我想使用的日期2013-05-152013-05-14然後計數將是2,因爲位置值已經改變兩倍(如圖所示)

可以這樣在單個查詢來完成,或者我會需要做一些處理服務器端?

感謝

+0

你能澄清每個字段之間的關係嗎? – ishegg

+0

每天有3行,'changes'的值可以每天更改。所以我需要得到'changes'列不同的行數,也就是說,如果2行已經改變('changes'不同於前一天),那麼count就是2等等。所以我只需要來計算兩個日期之間的變化次數,即有多少行已經改變(不是「更改」列的總和) –

+0

如果你放一個更大的例子,我認爲更好。現在,但導致'1',所以我們不能理解所有的情況。閱讀您的評論最多有3行日期?所以結果應該是'{0,1,2}?也不清楚如果更改是在同一天或不同的日子之間 –

回答

0

SQL DEMO

SELECT r1.`date`, 
     SUM(CASE WHEN r1.`position` != r2.`position` 
       THEN 1 
       ELSE 0 
      END) as daily_changes 
FROM `rankings` r1 
LEFT JOIN `rankings` r2 
    ON r1.`date` = r2.`date` + 1 
AND r1.`change_id` = r2.`change_id` 
GROUP BY r1.`date` 

OUTPUT

enter image description here

+0

嗨。使用上面的示例如果我具有所有相同的更改,則獲得3.如果我具有所有不同的值,則更改爲columb –

+0

示例:http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle= 90afd199d2dc0e9dfbab54a54ea1cbf7 –

+0

檢查這一個http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=b065bea74c18bd3cafed455ab76f115c'第14天= 0',因爲沒有前一天。你有沒有分組的數據,所以你可以調試源。並且你有最後的小組和我想要的結果。 –

0

選擇日期,MAX從X GROUP(變化)的日期

(或者COUNT的變化 - 不知道你需要什麼給定的問題)

+0

我需要知道有多少行已更改。所以在上面的例子中,每個日期有3行。其中2個已經改變(我需要這個值)。我需要計算他們有多少人已經改變(我的數據庫中有超過3行) –