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)
...
尽管更改资料模型以将日期和值作为列可能会更好。
0 评论