MySQL:以某种顺序连接两个表的不同行?

MySQL:以某种顺序连接两个表的不同行?,mysql,join,distinct,Mysql,Join,Distinct,我有一个我想要的库存单位和销售交易的列表,(1)按单位SKU加入,以及(2)按日期将一个交易关联到一个先进先出订单中的库存单位。我对第二部分有困难 我能想到的最好办法是: SELECT `units`.`unit_date`, `units`.`unit_id`, `trans`.`tran_date`, `trans`.`tran_id`, `units`.`unit_sku` FROM `units` INNER JOIN `trans` ON `trans`.`un

我有一个我想要的库存单位和销售交易的列表,(1)按单位SKU加入,以及(2)按日期将一个交易关联到一个先进先出订单中的库存单位。我对第二部分有困难

我能想到的最好办法是:

SELECT `units`.`unit_date`, `units`.`unit_id`, `trans`.`tran_date`, `trans`.`tran_id`, `units`.`unit_sku` FROM `units`
    INNER JOIN `trans`
        ON `trans`.`unit_sku` = `units`.`unit_sku`
GROUP BY `trans`.`tran_id`, `trans`.`unit_sku`
ORDER BY `units`.`unit_date` asc, `trans`.`tran_date` asc
;
单位
表格:

unit_date  | unit_id | unit_sku
2015-06-01 | 1       | U1KLM
2015-06-02 | 2       | U1KLM
2015-06-03 | 3       | U2QRS
2015-06-04 | 4       | U2QRS
2015-06-05 | 5       | U1KLM
tran_date  | tran_id | unit_sku
2015-06-11 | A       | U2QRS
2015-06-12 | B       | U1KLM
2015-06-13 | C       | U1KLM
2015-06-14 | D       | U2QRS
2015-06-15 | E       | U1KLM
trans
表格:

unit_date  | unit_id | unit_sku
2015-06-01 | 1       | U1KLM
2015-06-02 | 2       | U1KLM
2015-06-03 | 3       | U2QRS
2015-06-04 | 4       | U2QRS
2015-06-05 | 5       | U1KLM
tran_date  | tran_id | unit_sku
2015-06-11 | A       | U2QRS
2015-06-12 | B       | U1KLM
2015-06-13 | C       | U1KLM
2015-06-14 | D       | U2QRS
2015-06-15 | E       | U1KLM
所需结果是一个
交易id
,通过
单位日期
的最早到最晚顺序连接到
单位sku
的一个
单位id

unit_date  | unit_id | tran_date  | tran_id | unit_sku
2015-06-01 | 1       | 2015-06-12 | B       | U1KLM
2015-06-02 | 2       | 2015-06-13 | C       | U1KLM
2015-06-03 | 3       | 2015-06-11 | A       | U2QRS
2015-06-04 | 4       | 2015-06-14 | D       | U2QRS
2015-06-05 | 5       | 2015-06-15 | E       | U1KLM
查询(不需要的)结果仅将
传输id
连接到
单元sku
最早出现的
单元id

unit_date  | unit_id | tran_date  | tran_id | unit_sku
2015-06-01 | 1       | 2015-06-12 | B       | U1KLM
2015-06-01 | 1       | 2015-06-13 | C       | U1KLM
2015-06-01 | 1       | 2015-06-15 | E       | U1KLM
2015-06-03 | 3       | 2015-06-11 | A       | U2QRS
2015-06-03 | 3       | 2015-06-14 | D       | U2QRS
有没有关于如何达到预期效果的想法?在此设置中,只有
unit\u date
tran\u date
可排序;其余的是随机生成的

复制脚本:

DROP TEMPORARY TABLE IF EXISTS `units`;
DROP TEMPORARY TABLE IF EXISTS `trans`;
CREATE TEMPORARY TABLE `units` (`unit_date` date, `unit_id` char(1) , `unit_sku` char(5), PRIMARY KEY(`unit_id`));
CREATE TEMPORARY TABLE `trans` (`tran_date` date, `tran_id` char(1) , `unit_sku` char(5), PRIMARY KEY(`tran_id`));

INSERT INTO `units` (`unit_date`, `unit_id`, `unit_sku`) VALUES
    ('2015-06-01', '1', 'U1KLM')
    , ('2015-06-02', '2', 'U1KLM')
    , ('2015-06-03', '3', 'U2QRS')
    , ('2015-06-04', '4', 'U2QRS')
    , ('2015-06-05', '5', 'U1KLM')
;

INSERT INTO `trans` (`tran_date`, `tran_id`, `unit_sku`) VALUES
    ('2015-06-11', 'A', 'U2QRS')
    , ('2015-06-12', 'B', 'U1KLM')
    , ('2015-06-13', 'C', 'U1KLM')
    , ('2015-06-14', 'D', 'U2QRS')
    , ('2015-06-15', 'E', 'U1KLM')
;

SELECT `units`.`unit_date`, `units`.`unit_id`, `trans`.`tran_date`, `trans`.`tran_id`, `units`.`unit_sku` FROM `units`
    INNER JOIN `trans`
        ON `trans`.`unit_sku` = `units`.`unit_sku`
GROUP BY `trans`.`tran_id`, `trans`.`unit_sku`
ORDER BY `units`.`unit_date` asc, `trans`.`tran_date` asc
;

我相信这就是你想要的:(这是假设一对一的关系)


您能保证这两个表中始终存在1对1的记录关系吗?另外,您使用的数据库是什么?一个单元可以有多个事务——例如,如果一个单元被退回,然后第二次出售。但最常见的是1比1。关于什么数据库,我在MySQL 5.6.24上使用的是一个自主开发的解决方案,如果这是你的意思的话?是的,这对1对1很有效。我在玩一个1比n的游戏。我需要看看我的数据是如何连接的,但这让我开始了。