以下是我的部分问题:
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);