以下是我的部分问题:

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中的数据,其中MIN(def208.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 tempTable.minDate它就不应该出现在你的结果集中。
编辑
另一种代替使用另一个连接的方法是尝试将其放入where子句中,如下所示:
SELECT columnsIWant
FROM tables
JOIN otherTables ON conditions
WHERE realDef208.created = (SELECT MIN(created) FROM tempDef208 WHERE tempDef208.paw_id = realDef208.paw_id);

09-25 20:53