如何在Access SQL中只符合每个符合条件的行?
我有数据,看起来像这样如何在Access SQL中只符合每个符合条件的行?
CUSTID POLICY TYPE RANDOMTHING ETC
而且有时会出现每CUSTID乘行,与否则其余字段不同的值。我只想每个CUSTID返回一行,只取第一行的值(忽略其余行)。
我试过先申请CUSTID,但它似乎没有工作。
我相信你想要的东西,像
SELECT t1.*
FROM yourTable t1 INNER JOIN
(
SELECT CUSTID, MIN(POLICY) AS MinOfPOLICY
FROM yourTable
GROUP BY CUSTID
) t2 ON t1.CUSTID = t2.CUSTID AND t1.POLICY = t2.MinOfPOLICY
ORDER BY 1
在这个例子中,t1
和t2
是表别名。在大多数情况下,当构建一个不止一次引用同一个表的查询时,需要使用表别名来消除列引用的歧义。例如,您不能只说0123',因为您不清楚yourTable
的第一个实例是CUSTID
,还是来自第二个实例。
SQL语言允许通过将别名直接放在表名后面给别名表,所以yourTable t1
表示“yourTable
,使用别名t1
”。另一个别名t2
是GROUP BY
子查询(括号内的那个)的别名。
看起来像一个很好的猜测给我。 :-)如果这不是他所追求的,他应该向我们展示样本数据和他希望从样本中得到的输出。 – HansUp
@HansUp [TYPE]是隐式排序的唯一可能的候选人。排序RANDOMTHING看起来不会是最好的选择.... :) –
我不明白这里的t1和t2是什么?或者如何解析“yourTable t1”。假设我的查询名称是MyQuery –
您是否尝试过使用“TOP 1”谓词作为查询的一部分? (我假设你正在编写一个SQL语句)。 –
我该如何做一个“TOP 1”?是的,我可以编辑SQL语句 –
谷歌搜索它,我不认为这是我所需要的。它只返回我的数据集的最上面一行。我需要每个CUSTID的“顶级”行(实际上,我的CUSTID就像第二个域) –