SQL Query为每个匹配提供最小的DATE

时间:2014-05-27 08:32:41

标签: mysql sql join subquery

我一直试图在没有帖子的情况下解决这个问题,但我找不到合适的答案......

我有一个SALE-Table和一个APPOINTMENT-Table。 两者都是coloumn sale_id。 在APPOINTMENT中是do_by(日期)列,每个sale_id可以包含多个条目。

我需要的是NEXT约会PER匹配sale_id。 STH。像这样:

appointment_id | sale_id | do_by
--------------------------------------
1365           | 160     | 27.05.2014
2546           | 173     | 29.05.2014
5483           | 265     | 01.06.2014

到目前为止,我的查询只给了我最小的do_by ALL ...

SELECT a.appointment_id, a.do_by, s.sale_id

FROM [Askus7].[CRM7].[APPOINTMENT] a, [Askus7].[CRM7].[SALE] s

WHERE (s.sale_id = a.sale_id) AND a.do_by = 
        (
        SELECT MIN(a2.do_by) 
        FROM [Askus7].[CRM7].[APPOINTMENT] a2, [Askus7].[CRM7].[SALE] s2
        WHERE s2.sale_id = a2.sale_id
        AND s.sale_id = a.sale_id
        )

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

那样的东西? (另)

SELECT a.appointment_id, ms.do_by, a.sale_id
(
      SELECT a2.sale_id as sale_id, MIN(a2.do_by) as do_by
      FROM [Askus7].[CRM7].[APPOINTMENT] a2 JOIN [Askus7].[CRM7].[SALE] s2
      ON a2.sale_id=s2.sale_id
      GROUP BY a2.sale_id
)ms
JOIN [Askus7].[CRM7].[APPOINTMENT] a
ON a.sale_id = ms.sale_id and a.do_by = ms.do_by;

警告:如果您没有索引do_by列并且您的APPOINTMENT表很大,则查询可能会很慢。