mysql - SQL 查询给出每场比赛的最小日期

标签 mysql sql join subquery

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

我有一个销售表和一个预约表。 两者中都有一个列 sale_id。 APPOINTMENT 中有 do_by(date) 列,每个 sale_id 可以有多个条目。

我需要的是匹配 sale_id 的下一个预约。 某事。像这样:

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

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

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
        )

感谢您的帮助!

最佳答案

类似的事情? (未经测试)

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 表很大,则查询可能会非常慢。

关于mysql - SQL 查询给出每场比赛的最小日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23884612/

相关文章:

sql - 如何将我的 json 对象转换为 postgres 表

mysql - 在数据库中存储主题标签和用途/组合的最佳方式

MySQL Limit 和 Order Left Join

mysql - 在选择时用另一个表覆盖/加入 MySQL 表

java - 使用 hibernate 锁定表

php - 嵌套的 while 循环不起作用,而是显示意外的 '}'

php - mysql 类似带有逗号的值

sql - Mysql设置默认值为项目自动递增键

php - 如何根据一个 id 列表动态插入多行

mysql - SQL 内连接分组依据