选择Distinct基于另一列SQL的最小值

时间:2018-03-27 08:53:30

标签: sql excel tsql odbc

我希望从中选择3列数据,请参阅下面的示例

WONO    EQMFSN      DOCDT8
8523248 02T300118   20160616
8523248 02T300118   20160621
8523248 02T300118   20160620
8523249 02T300118   20160620
8523249 02T300118   20160620
2414888 02T300118   20161109
2414888 02T300118   20161109
2414888 02T300118   20161109
2414888 02T300118   20161109
1127111 02T300118   20170321
8523253 02T300119   20160620
8523253 02T300119   20160625
8523253 02T300119   20160624
8523254 02T300119   20160624
8523254 02T300119   20160624
2414893 02T300119   20161113
2414893 02T300119   20161113
2414893 02T300119   20161113
2414893 02T300119   20161113
1127116 02T300119   20170325

我想为MIN DOCDT8选择不同的EQMFSN和WONO

所以我的输出是:

EQMFSN      WONO
02T300118   8523248
02T300119   8523253

我试过了:

Select  
    T.EQMFSN
,   min( T.docdt8)
,   T.wono

From
    T

Group By
    T.EQMFSN
,   T.wono

数据在IBM DB2中,但我在Excel中通过odbc / as400连接创建此查询。

3 个答案:

答案 0 :(得分:2)

以下是我们问题的解决方案:

SELECT `EQMFSN`,`WONO`
FROM TAble1
WHERE `DOCDT8` IN (
                   SELECT MIN(`DOCDT8`)
                   FROM TAble1
                   GROUP BY `EQMFSN`
                  )
GROUP BY `EQMFSN`

<强>输出:

EQMFSN      WONO
02T300118   8523248
02T300119   8523253

您的查询演示:

  

http://sqlfiddle.com/#!9/31437d/6

答案 1 :(得分:2)

从您想要的输出中,您想要询问每个EQMFSN字段的最小值:

理想情况下,您应该尝试通过对每个EQMFSN进行分组来获取每个EQMFSN的最小DOCDT8,然后将其连接回原始表以获得相应的WONO。 这应该匹配

SELECT EQMFSN, WONO
FROM t
INNER JOIN
 (SELECT EQMFSN, min(DOCDT8) as mindoc from t group by EQMFSN) t2
on t2.EQMFSN = t.EQMFSN
and t2.mindoc = t.DOCDT8;

答案 2 :(得分:0)

根据您的描述,您似乎想要:

EQMFSN      WONO
02T300118   8523248

唯一需要注意的是,这会回来:

'20160616'

因为最短日期是flow check,并且该日期只有一条记录。