我的问题出现在一个包含3列的特定表中。
itemnr --item number (int) 7 chars like 1111111
ccyymm --century year month (int) 6 chars like 201605
amount --amount of the specific item for that year month combo.
基本上我想创建一个表格,显示过去12个月的数量。
我使用以下代码创建了12个虚拟表
SELECT *
FROM items
WHERE ccyymm = year(now())||right('00'||month(now()),2) -1
这显示了where ccyymm = 201604
的所有项目
而且效果很好。
问题在于,当我减去的月份超过当月时,我必须从年份中减去1,所以我使用了以下内容:
SELECT *
FROM items
WHERE ccyymm = (case
when month(now()) < 12
then year(now())- 1||right('00'||month(now()),2)
else year(now())||right('00'||month(now()),2) -12
end)
因此,如果我想获得12个月前的数据,这个月的数据少于12,那么它只会从一年中减去1,所以基本上它必须给我201505
。它说我的SQL是有效的,但是当我在数据库中查看有ccyymm
的数据时,它还没有返回任何值。
答案 0 :(得分:2)
SELECT * FROM ITEMS WHERE CCYYMM = (year(now()) * 100 + month(now())) - 100
答案 1 :(得分:0)
您已将问题标记为MySQL和&amp; SQL。
如果您使用的是MySQL,那么您可以使用日期函数:
SELECT * FROM ITEMS WHERE CCYYMM = date_format(date_sub(now(),INTERVAL 6 MONTH), '%Y%m');
答案 2 :(得分:-2)
在WHERE中,尝试像CCYYMM&gt; (现在减去一年) 虽然我不知道最后一部分的确切语法。