Mysql从列表中选择所有并按日期在另一个列表上排序

时间:2016-07-24 10:01:38

标签: mysql subquery

所以我正在建立一个保修管理系统。保修期即将结束时让您知道的事情。

我将保修条款存放在名为“保修单”的清单中,并将每个保修期更新保存在一个名为warranty_entries的单独表格中。

warranties表仅包含自动增量ID,产品名称,公司,制作者以及创建日期。

warranty_entries表包含Auto_Increment ID,其所属保修的ID,到期日期,开始日期,日期或创建以及其他一些字段。

我正在尝试从warranties中选择*并按warranty_entries中最新条目的结束日期对其进行排序。

因此,保修到期日是最新到期保修条目的到期日期。

我会再试一次,因为我也很困惑地​​描述了这一点。 我想在最近创建的条目的到期日之前订购所有保修条款。到期日。

我似乎无法解决如何在表中选择1个条目并按条目到期日期对另一个表进行排序的问题。

更新 - 表格结构和所需的输出

TABLE: warranties
-----------------------------------------------------------------
|      id       |       1        |      2        |       3      |
|     name      | chick warranty | duck warranty | cat warranty |  
-----------------------------------------------------------------

TABLE: warranty_entries
----------------------------------------------------
|      id       |  1   |  2   |  3   |  4   |  5   | 
|  warranty_id  |  1   |  2   |  2   |  3   |  3   |
|   end_date    | 2010 | 2005 | 2006 | 2010 | 2015 |
|  start_date   | 2008 | 2001 | 2005 | 2008 | 2010 |
----------------------------------------------------

我想从保修中选择所有内容,并在保修条目的相应条目的结束日期之前订购。由于有多个保修条目具有相同的warranty_id,我想使用最近的结束日期来订购。

所以在查询之后,结果集看起来像这样:

RESULT SET:
-----------------------
| id |     name       |
| 3  |  cat warranty  |
| 1  | chick warranty |
| 2  | duck warranty  |
-----------------------

1 个答案:

答案 0 :(得分:0)

您可以在子查询中执行此操作,如下所示:

SELECT w.*, (SELECT end_date FROM warranty_entries we WHERE we.warranty_id = w.id ORDER BY end_date DESC LIMIT 1) AS end FROM warranties w ORDER BY end DESC

这应该可以解决问题。根据需要更改表和列的名称。