我正在尝试将两个表组合在一起,并且我想要一个最小的id,其中一个表的日期大于另一个表的日期。我认为这是一项简单的任务,但它给了我一个合适的选择。
这是我天真的尝试:
select table1.id, MIN(table2.id)
FROM table1
INNER JOIN table2
ON table2.id = table1.id
WHERE table1.date > table2.date
这不起作用,因为一旦table1中的日期大于table2,它就会加入所有id,而不仅仅是大于日期的id。这意味着无论如何都会返回最小的id。
由于
编辑清晰度:
产品
id | price_date
---------------
1 | 2011-01-02
价格
id | fid | price_date
---------------
1 | 1 | 2011-01-01
2 | 1 | 2012-01-01
所以我想回归
product.id | price.id
---------------------
1 | 1
答案 0 :(得分:1)
这可能就是你要找的东西。
select table1.id,
table1.date,
MIN(table2.date) Table2MinDate,
MIN(table2.id) Table2SmallestID
FROM table1
INNER JOIN table2
ON table1.date < table2.date
group by table1.id, table1.date
order by 1, 2
我坚信table1和table2之间应该存在连接条件,但它不能是id,因为从table2请求最小id是没有意义的。它总是与table1中的id具有相同的值。
答案 1 :(得分:0)
编辑以匹配样本数据:
select id AS product_id
,(select min(id)
from price
where fid = p.id
and price_date <= p.price_date
) AS price_id
from product p
EDIT2:随着样本数据显示fk关系,Nikola的回应是更好的解决方案:
select p.id AS product_id
,MIN(x.id) AS price_id
from product p
,price x
where x.fid = p.id
and x.price_date <= p.price_date
group by p.id
答案 2 :(得分:0)
我不确定我完全理解你想要实现的目标 - 我假设你想为table1中的每一行返回table2的min(),其中table1.date&gt; table2.date。在这种情况下,您可以使用子选择:
SELECT table1.id, (SELECT min(id) FROM table2 WHERE table1.date > table2.date)
FROM table1
INNER JOIN table2
ON table2.id = table1.id AND table1.date > table2.date