繁体   English   中英

Mysql根据不同表中的2列对结果进行排序

[英]Mysql sort the results based on 2 columns from different tables

我有 2 个具有以下结构的表

Products

id | name      | created_at          |
 1 | Produt1   | 2019-11-01 19:05:56 |
 2 | Product 2 | 2020-01-28 19:05:56 |
 3 | Product 3 | 2020-01-26 19:05:56 |

Draws

id | product_id |draw_number | created_at          |
 1 |          1 |          1 | 2020-01-28 19:05:56 | 
 2 |          1 |          2 | 2020-01-27 19:05:56 |

场景是,我们在产品表中有 3 个产品,对于产品 1,我们在抽奖表中有 2 个条目。

我在这里寻找一个查询,从产品表中选择数据,数据应按以下顺序排序

  1. 如果绘制 created_at 存在,则按创建于的绘制排序
  2. 如果没有抽奖,则按在产品表中创建的排序。

结果输出应该是这样的

id | name      | created_at          |
 1 | Produt1   | 2019-01-28 19:05:56 | //created_at of draws of latest draw for this product
 2 | Product 2 | 2020-01-28 19:05:56 |
 3 | Product 3 | 2020-01-26 19:05:56 |

如何选择预期数据? TIA

测试

SELECT t1.*
FROM Products t1
LEFT JOIN ( SELECT t2.product_id,
                   MAX(t2.created_at) created_at 
            FROM Draws t2
            GROUP BY product_id ) t3 ON t1.id = t3.product_id
ORDER BY GREATEST(t1.created_at, t3.created_at) DESC

这会给你想要的结果

CREATE TABLE Draws (`id` int, `product_id` int, `draw_number` int, `created_at` datetime) ; INSERT INTO Draws (`id`, `product_id`, `draw_number`, `created_at`) VALUES (1, 1, 1, '2020-01-28 19:05:56'), (2, 1, 2, '2020-01-27 19:05:56') ;
\n \n\n \n
CREATE TABLE Products (`id` int, `name` varchar(9), `created_at` datetime) ; INSERT INTO Products (`id`, `name`, `created_at`) VALUES (1, 'Produt1', '2019-11-01 19:05:56'), (2, 'Product 2', '2020-01-28 19:05:56'), (3, 'Product 3', '2020-01-26 19:05:56') ;
\n \n\n \n
SELECT p.id,p.name,MAX( IFNULL(d.`created_at` , p.`created_at`)) FROM Draws d RIGHT JOIN Products p ON d.product_id = p.id GROUP BY p.id,p.name ORDER BY p.id;
\n身份证 | 姓名 |  MAX(IFNULL(d.`created_at`, p.`created_at`))\n -: |  :-------- |  :--------------------------------------------\n  1 | 产品1 |  2020-01-28 19:05:56                          \n  2 | 产品 2 |  2020-01-28 19:05:56                          \n  3 | 产品 3 |  2020-01-26 19:05:56                          \n

db<> 在这里摆弄

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM