我需要根据可以购买的月份对产品进行分类。 我会在特定月份每年都有库存。
我想每个月标记1到12个。
要选择我想要使用的月份,我会输入类似于选择1,2,11的内容。 但我也在同一个表中使用其他日期的其他产品。
I.E月1,5,7。我想避免使用年份和日期格式。
我目前有这种格式的表格。
Object | Month |
Peanut | 1,2,11|
Coconut| 4,5,8 |
这意味着花生将在第1个月,第2个月和第11个月被提取出来。 椰子将在第4,5和8个月提取。
我试图选择月份作为ID,但是我不能在一个产品上有几个ID。
我考虑过VarChar,但我不确定如何让它工作,如果它会慢。
我正在使用HeidiSQL和mySQL。有没有其他可行的SQL?
答案 0 :(得分:0)
你可以使用它,但不是最好的方法。规范化是你的朋友。
SELECT `Object` , `MONTH`
FROM mytable
WHERE
FIND_IN_SET("1",`MONTH`)
OR
FIND_IN_SET("2",`MONTH`)
OR
FIND_IN_SET("11",`MONTH`);
答案 1 :(得分:0)
以标准化格式存储对象。记录的唯一性将是对象和提取月份。对这种设置感到满意需要一些练习,尤其是学习使用日期(参见MySQL documentation on DATE types)。请参阅下面的更新表:
|Object | Date |
|-------- | -------- |
|Peanut | 01-JAN-15|
|Peanut | 01-FEB-15|
|Peanut | 01-NOV-15|
|Coconut | 01-APR-15|
|Coconut | 01-MAY-15|
|Coconut | 01-AUG-15|
请注意,日期数据类型是一条包含以下信息的信息:
该列仅以dd-MON-yy格式显示。现在,您将能够编写SQL
语句,从而更有效地聚合数据。使用JAN, FEB, NOV
函数限制为MONTH()
的select语句如下所示:
select object, date, month(date)
from myTable
where month(date) in (01, 02, 11);
将日期存储为日期将允许您使用日期和时间功能。要了解有关日期和时间功能的更多信息,请查看MySQL docs。
答案 2 :(得分:0)
不是存储包含月份列表的行,而是尝试每月存储一行:
sqlContext.read.format("jdbc").options(Map(
"url" -> "xxxx",
"dbtable" -> "(SELECT * FROM xxx LIMIT 4) tmp",
))
注意:
product | month |
Peanut | 1 |
Peanut | 2 |
Peanut | 11 |
Coconut| 4 |
Coconut| 5 |
Coconut| 8 |
-- What products are available in November?
SELECT product FROM product_month_available WHERE month=11;
通常是包含有效产品列表的product_month_available.product
表的FK,并且可能是
关于每一个的其他数据。 product
是有效月份(1-12)。