Mysql 从联接表中获取具有最小日期的行,但不显示此日期?

Mysql 从联接表中获取具有最小日期的行,但不显示此日期?,mysql,sql,select,join,Mysql,Sql,Select,Join,以下是我的部分疑问: SELECT my1.data AS PAW_ID, abc.abc_medium AS abc_Medium, my.data AS Trial_Date, my2.data AS Upgrade_Date, my3.lastmod AS Cancel_Date 中间有几个接头。结果集给出了PAW_ID的多个实例,而我只需要一个实例。我知道当查询连接到另一个表abc_emails.def208时,最早的def208.created

以下是我的部分疑问:

SELECT
    my1.data AS PAW_ID,
    abc.abc_medium AS abc_Medium,
    my.data AS Trial_Date,
    my2.data AS Upgrade_Date,
    my3.lastmod AS Cancel_Date
中间有几个接头。结果集给出了PAW_ID的多个实例,而我只需要一个实例。我知道当查询连接到另一个表abc_emails.def208时,最早的def208.created行所在的记录就是我需要的行

因此,如果上面的查询生成以下重复数据:

123 | email | 1-1-2014 | 2-1-2014 | 3-1-2014
123 | banner| 4-1-2014 | 2-1-2014 | 3-1-2014
我知道这个PAW_ID 123对应于abc_emails.def208中的数据,其中MINdef208.created应该返回包含电子邮件的行


def208.created不在查询的SELECT部分,但我确实想利用它。如何选择此值并按其他内容分组,但将其隐藏?唯一需要做的就是获取每个PAW_ID的最早关联数据点。

我相信您可以使用子查询来完成这一点。您可以创建一个具有PAW_ID和最小日期的表,并将其与PAW_ID和日期匹配的其他表连接起来,这样可以消除不需要的行。在不了解表结构的情况下,很难给出准确的查询,但我想您可以这样做:

SELECT columnsIWant
FROM tables
JOIN otherTables ON conditions
JOIN (SELECT paw_id, MIN(created) AS minDate
      FROM def208
      GROUP BY paw_id) tempTable
   ON tempTable.paw_id = realTable.paw_id AND tempTable.minDate = realTable.created;
SELECT columnsIWant
FROM tables 
JOIN otherTables ON conditions
WHERE realDef208.created = (SELECT MIN(created) FROM tempDef208 WHERE tempDef208.paw_id = realDef208.paw_id);
只要你没有SELECT attable.minDate,它就不应该出现在你的结果集中

编辑

另一种不使用其他联接的方法是尝试将其放入where子句中,如下所示:

SELECT columnsIWant
FROM tables
JOIN otherTables ON conditions
JOIN (SELECT paw_id, MIN(created) AS minDate
      FROM def208
      GROUP BY paw_id) tempTable
   ON tempTable.paw_id = realTable.paw_id AND tempTable.minDate = realTable.created;
SELECT columnsIWant
FROM tables 
JOIN otherTables ON conditions
WHERE realDef208.created = (SELECT MIN(created) FROM tempDef208 WHERE tempDef208.paw_id = realDef208.paw_id);

创建一个视图,选择从当前数据创建的Distinctpaw_id和Min,并在id和日期上将该视图与普通表连接,这将隔离您要查找的行,而不必选择不需要的日期。

您可以发布查询或表结构的其余部分吗?您的意思是WHERE=select MINcreated FROM def208?请注意,SQL中的日期遵循特定格式。我必须在当天离开之前取消查询。如果我因为过去发生的事件而让查询在服务器上运行,我们的sr开发人员会感到不安。我将在周一上午再次开始运行它。很抱歉让您挂断电话,我很感谢您的回答,并将在它最终运行后进行更新。@DougFirr必须是一个大型数据集。“好吧,我希望这对你有帮助。”道格菲尔刚刚回来,因为我对这件事很好奇。如果你还没有运行它,就忽略这个。或者,如果它不起作用,请告诉我,我可以再次查看它。它正在运行!我希望它能填满。似乎我们的服务器在处理子查询时遇到了困难。@DougFirr如果你运气不好的话,我给出了另一个想到的选项,但我不确定它是否比第一个更好。我也不能保证不会更糟。我不是效率方面的专家。