Mysql

從同一個 Mysql 表中的 2 個不同日期中減去同一列中的值

  • March 19, 2019

我有一個 MySql 表,如:

Item        Date          Likes

Book        2012-05-20    402
Book        2012-05-21    432
Book        2012-05-22    450
Pen         2012-05-20    20
Pen         2012-05-21    20
Pen         2012-05-22    25
  1. 計算和返回Likes所有值的 2 個設置日期之間的列差異的最簡單查詢是什麼Item,按差異排序?

例如:

Likes2012-05-20 和 2012-05-21 之間的差異返回下一個結果:

Item        Difference
Book        30
Pen         0

Likes2012-05-20 和 2012-05-22 之間的差異返回下一個結果:

Item        Difference
Book        48
Pen         5

2)還有一些情況下,Item表中的某些日期沒有記錄,在這些情況下不Item應該返回結果。

  1. 優化查詢速度的正確索引應該是什麼?

我確實遇到過這個可能有效的查詢,但它是一個巨大的查詢,我相信可以有一個更緊湊和優雅的解決方案:)

SELECT t1.item, t2.likes - t1.likes difference
FROM table t1, table t2
WHERE t1.item = t2.item
 AND t1.date = @first_date
 AND t2.date = @second_date

如果您需要所有項目(@first_date 或 @second_date 上的數據不存在),請從笛卡爾重寫為 FULL JOIN 並使用 COALESCE 將 NULL 替換為零。

引用自:https://dba.stackexchange.com/questions/232498