拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在MySQL中根据日期范围选择性地选择列资料

在MySQL中根据日期范围选择性地选择列资料

白鹭 - 2022-02-12 1960 0 0

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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *