Mysql 如果价格在同一天(间隔7天和14天)发生变化,如何选择数据?
如果在同一天、间隔7天或间隔14天内以不同价格从相同/不同供应商处采购材料,如何使用SQL代码提取数据? 我很累,但无法为此编写代码。我是SQL新手 数据表- 物料日期供应商物料数量净价Mysql 如果价格在同一天(间隔7天和14天)发生变化,如何选择数据?,mysql,sql,Mysql,Sql,如果在同一天、间隔7天或间隔14天内以不同价格从相同/不同供应商处采购材料,如何使用SQL代码提取数据? 我很累,但无法为此编写代码。我是SQL新手 数据表- 物料日期供应商物料数量净价 MariaDB [sandbox]> DROP TABLE IF EXISTS T; Query OK, 0 rows affected (0.11 sec) MariaDB [sandbox]> CREATE TABLE T( Item INT ,Dt DATE ,Vendor INT, PRI
MariaDB [sandbox]> DROP TABLE IF EXISTS T;
Query OK, 0 rows affected (0.11 sec)
MariaDB [sandbox]> CREATE TABLE T( Item INT ,Dt DATE ,Vendor INT, PRICE INT);
Query OK, 0 rows affected (0.16 sec)
MariaDB [sandbox]>
MariaDB [sandbox]> INSERT INTO T VALUES
-> (1,'2017-06-12',1,10),(1,'2017-06-25',1,20),
-> (1,'2017-06-26',1,30),(1,'2017-06-26',1,40),
-> (2,'2017-06-26',1,10),(2,'2017-06-26',1,40),
-> (3,'2017-05-26',1,10),(3,'2017-05-26',1,40),
-> (4,'2017-06-20',1,10),(4,'2017-06-20',1,40),
-> (5,'2017-06-12',1,10),(5,'2017-06-12',1,40);
Query OK, 12 rows affected (0.07 sec)
Records: 12 Duplicates: 0 Warnings: 0
MariaDB [sandbox]>
MariaDB [sandbox]> select s.item,
-> max(case when src = 1 then s.prices else 0 end) as PricesToday,
-> max(case when src = 2 then s.prices else 0 end) as Prices7,
-> max(case when src = 3 then s.prices else 0 end) as Prices14
-> from
-> (
-> SELECT 1 as src,item,COUNT(DISTINCT PRICE) Prices
-> FROM T
-> where dt = date(now())
-> GROUP BY ITEM HAVING COUNT(DISTINCT PRICE) > 1
-> union
-> SELECT 2,item,COUNT(DISTINCT PRICE) Prices
-> FROM T
-> where datediff(date(now()),dt) <= 7
-> GROUP BY ITEM HAVING COUNT(DISTINCT PRICE) > 1
-> union
-> SELECT 3,item,COUNT(DISTINCT PRICE) Prices
-> FROM T
-> where datediff(date(now()),dt) <= 14
-> GROUP BY ITEM HAVING COUNT(DISTINCT PRICE) > 1
-> ) s
-> group by s.item;
+------+-------------+---------+----------+
| item | PricesToday | Prices7 | Prices14 |
+------+-------------+---------+----------+
| 1 | 2 | 3 | 4 |
| 2 | 2 | 2 | 2 |
| 4 | 0 | 2 | 2 |
| 5 | 0 | 0 | 2 |
+------+-------------+---------+----------+
创建触发器
然后您希望将输出保存到另一个表中,因此创建该新表。
像这样的
分隔符$$
更新好的旧表后创建触发器检查价格
每行
开始
如果是新的价格,那么是旧的价格
在您的\u新\u更好\u表中插入新价格
新价格;
如果结束;
终止
$$
定界符
注意:编辑可以格式化代码吗?我无法使用ctrl+k来获取它。下面的查询检索14天内存在另一条记录的所有记录,该记录针对具有另一价格的同一物料。将14更改为7或0或任何其他要检查的值
select *
from mytable
where exists
(
select *
from mytable other
where other.material = mytable.material
and other.netprice <> mytable.netprice
and abs(datediff(other.date, mytable.date)) <= 14 -- or 7 or 0
)
order by material, date, netprice;
请尝试更准确地解释您想要的方法,并添加一些测试数据-创建一个链接并发布链接。这将使我们更容易帮助你你的问题不清楚。Stackoverflow用于解决问题或使用编码器调试代码。最好自己尝试sql,在这里发布代码并找到解决方案。请创建模式、表和其他相关的东西,试试你自己。Butter luckSee一次尝试和输入输出数据将帮助我们了解你想要什么。-数据表。。我不确定这方面的逻辑。材料价格在季末甚至每个月都在变化。但是,如果材料在同一天、7天或14天内以不同价格从相同/不同的供应商处采购,这是一个值得关注的问题。必须强调这些情况,以便X公司能够采取必要的行动,消除因以更高价格采购而可能产生的潜在损失。触发器难道不是一个可行的解决方案吗?触发器在这里不合适,尤其是因为您必须编写另一个查询来确定更改发生的时间,而今天的更改不会是明天的更改。这不是一个可行的方法,因为这迫使他在每次检查时都进行查询。方法是触发,所以这将自动完成。