mysql 有语句不返回行

标签 mysql

我尝试根据 fifo_in_dateorder_date 之间的差异为给定订单分配正确的 fifo_cost:order_datefifo_date_in 之间的最小差异关联的 fifo_cost 应分配给该订单。

以下 mysql 片段不会返回任何记录。我希望它返回一条 fifo_date_in 最接近 order_date 的记录,但显然我遗漏了一些东西。

drop table if exists tmp;

create table tmp (
order_sequence int,
order_number int,
order_date date,
fifo_date_in date,
fifo_cost float);

INSERT INTO tmp (order_sequence, order_number, order_date, fifo_date_in, fifo_cost) VALUES (5613, 561, '2013-01-02','2009-01-01',1.55);
INSERT INTO tmp (order_sequence, order_number, order_date, fifo_date_in, fifo_cost) VALUES (5613, 561, '2013-01-02','2009-02-01',2.55);
INSERT INTO tmp (order_sequence, order_number, order_date, fifo_date_in, fifo_cost) VALUES (5613, 561, '2013-01-02','2009-03-01',3.55);
INSERT INTO tmp (order_sequence, order_number, order_date, fifo_date_in, fifo_cost) VALUES (5613, 561, '2013-01-02','2009-04-01',4.55);
INSERT INTO tmp (order_sequence, order_number, order_date, fifo_date_in, fifo_cost) VALUES (5613, 561, '2013-01-02','2009-05-01',5.55);

SELECT
  order_sequence, order_number, order_date, fifo_date_in, fifo_cost, datediff(order_date,fifo_date_in) as ddiff
FROM tmp
GROUP BY order_sequence, order_number, order_date
HAVING datediff(order_date,fifo_date_in) = min(datediff(order_date,fifo_date_in))

最佳答案

如果你想获得成本,我认为你必须找到最小值并连接回基表:

SELECT t.order_sequence, t.order_number, t.order_date, t.fifo_date_in, t.fifo_cost
  FROM tmp t
  INNER JOIN ( SELECT order_sequence, order_number, order_date
                     ,MIN(datediff(order_date,fifo_date_in)) as ddiff
                 FROM tmp
                 GROUP BY order_sequence, order_number, order_date
              ) m
         ON (m.order_sequence = t.order_sequence
             AND m.order_number = t.order_number
             AND m.order_date = t.order_date
             AND datediff(t.order_date, t.fifo_date_in) = m.ddiff)

此外,如果最接近可以表示之前或之后,您可能必须考虑绝对值。

这是SQLFiddle

关于mysql 有语句不返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287282/

相关文章:

mysql - 如何在左连接中使用子查询作为表

mysql - 根据另一个表字段对一个表字段求和

php - 从数据库加载消息

php - 查询仅选择仅具有单一状态的行

php - 在 MySQL 查询中相互检查两个表

mysql - 连接单独的数据库时使用的连接变量?

java - Mysql+JDBC+Linux : executeQuery returns empty result set when it shouldn't

mysql - 具有 2 个主键的内连接

mysql - 按列组合 mysql 查询

mysql - 结合 select distinct 和 order by