我有这个表1
idproduct(PK) | date_to_go
1 2010-01-18
2 2010-02-01
3 2010-02-21
4 2010-02-03
以及控制date_to_go更新的另一个table2
id | idproduct(FK) | prev_date_to_go | date_to_go | update_date
1 1 2010-01-01 2010-01-05 2009-12-01
2 1 2010-01-05 2010-01-10 2009-12-20
3 1 2010-01-10 2010-01-18 2009-12-20
4 3 2010-01-20 2010-02-03 2010-01-05
因此,在本例中,对于table1.idproduct#1 2010-01-18是实际的date_to_go和2010-01-01(table2.prev_date_to_go,第一个reg)是原始的date_to_go。
使用此查询
select v.idproduct, v.date_to_go, p.prev_date_to_go original_date_to_go
from table1 v
left join produto_datas p on p.idproduto = v.idproduto
group by (v.idproduto)
order by v.idproduto
我可以假设original_date_to_go将是table2的第一个相关注册表吗?
idproduct | date_to_go | original_date_to_go
1 2010-01-18 2010-01-01
2 2010-02-01 NULL
3 2010-02-21 2010-01-20
4 2010-02-03 NULL
答案 0 :(得分:1)
不,您不能假设您将始终从第一行获得prev_date_to_go
的值。当您选择未在GROUP BY中列出的列时,您可以获取的值可以是任何行中的值。有关更多信息,请参阅MySQL文档GROUP BY and HAVING with Hidden Columns:
使用此功能时,每个组中的所有行应与GROUP BY部分中省略的列具有相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。
答案 1 :(得分:0)
好吧,我使用了一个子查询。
select v.idproduct, v.date_to_go, (select p.prev_date_to_go from table2 p where p.idproduct=v.idproduct order by idtable2 asc limit 1) original_date_to_go from table1 v group by (v.idproduct) order by v.idproduct