Mysql 如果价格在同一天(间隔7天和14天)发生变化,如何选择数据?

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

如果在同一天、间隔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, 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公司能够采取必要的行动,消除因以更高价格采购而可能产生的潜在损失。触发器难道不是一个可行的解决方案吗?触发器在这里不合适,尤其是因为您必须编写另一个查询来确定更改发生的时间,而今天的更改不会是明天的更改。这不是一个可行的方法,因为这迫使他在每次检查时都进行查询。方法是触发,所以这将自动完成。