MySQL 有沒有辦法根據作為變數輸入的日期選擇特定列?
例如,如果有一個包含各種專案從第 1 天到第 31 天的每日資料的表。如下表——
| ID | 月 | 年 | 物品 | 第一天 | 第 2 天 | 第3天 | 第 4 天 | 第 5 天 |
|---|---|---|---|---|---|---|---|---|
| 1 | 十二月 | 2021年 | 包 | 2 | 4 | 2 | 5 | 1 |
| 2 | 十二月 | 2021年 | 鉛筆 | 3 | 5 | 1 | 8 | 2 |
如果當月有任意數量的專案需要,這將持續到第 31 天。
我希望能夠輸入一個日期范圍,例如 2021-12-01 和 2021-12-03 以及專案名稱“Bag”,并獲得該資料范圍內值的總和 - 2 4 2 = 8。
這可能嗎?
如果我正在嘗試的這種當前方法無法實作,有沒有辦法完成它?
謝謝。
uj5u.com熱心網友回復:
這可能不是您想要的答案,但您應該認真修復您的資料模型。不要將日期存盤為列,而是將每個日期的資料點存盤在單獨的記錄中。因此,您的示例表中的第一條記錄將變為:
id | Item | Date | num_items
1 | Bag | 2021-12-01 | 2
1 | Bag | 2021-12-02 | 4
1 | Bag | 2021-12-03 | 2
1 | Bag | 2021-12-04 | 5
1 | Bag | 2021-12-05 | 1
現在您的查詢變得更容易處理:
SELECT id, Item, SUM(num_items) AS total
FROM yourTable
WHERE Date BETWEEN '2021-12-01' AND '2021-12-03' AND Item = 'Bag'
GROUP BY id, Item;
uj5u.com熱心網友回復:
有點冗長,但你可以這樣做:
SELECT
IF (DAY('2021-12-01') <= 1 AND DAY('2021-12-03') >= 1, day1, 0)
IF (DAY('2021-12-01') <= 2 AND DAY('2021-12-03') >= 2, day2, 0)
IF (DAY('2021-12-01') <= 3 AND DAY('2021-12-03') >= 3, day3, 0)
...
盡管更改資料模型以將日期和值作為列可能會更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/388643.html
標籤:mysql
