我在这里查看了几篇文章,但找不到答案,但是可能是问题和答案比我的薪水等级高一点。
我有一个具有两个ID字段(ID1和ID2)以及许多其他列的MSAccess表。
我想查询(SELECT语句)表,并且需要做两件事。不知道订单是否重要。我希望查询返回表中的所有列。
只是无法弄清楚如何使用SQL Select语句来做到这一点。
示例数据-假设DateFld从上到下都是ASC
<table id="userWall">
<tbody>
<td class="tableLeft">
<b>example</b>
<p>text here</p>
</td>
<td class="tableRight">
<b>date</b>
</td>
</tbody>
</table>
保留第1、3、4、8行
无索引,因为此表是通过make表查询创建的;但我可以添加它们。让我知道您是否需要更多。
答案 0 :(得分:1)
对于此示例数据,您可以使用NOT EXISTS
:
SELECT t.*
FROM tablename AS t
WHERE NOT EXISTS (
SELECT 1 FROM tablename
WHERE ID2 = t.ID2 AND DateFld < t.DateFld
)
结果:
ID1 ID2 DateFld
1 24 ...
2 23 ...
3 98 ...
6 72 ...
答案 1 :(得分:-1)
SELECT
ID1,
ID2,
[allOtherColumns]
FROM(
SELECT
ID1,
ID2,
ROW_NUMBER() OVER (PARTITION BY ID1 ORDER BY ID1) AS ID1Selector,
ROW_NUMBER() OVER (PARTITION BY ID2 ORDER BY DateValue ASC) AS ID2Selector,
[allOtherColumns)
FROM tbl) AS InnerQry
WHERE ID1Selector=1 AND ID2Selector=1
注意,这是可能在Access中工作的SQL Server代码。我没有使用Access的丰富经验,但是我知道SQL。在SQL中,ROW_NUMBER()窗口函数会将ID1除以唯一的ID1,因此遇到的第一个ID1将是它唯一选择的ID1,并且ID2Selector会将行号1赋予它在每个个体中遇到的最早的日期值ID2。
也许有一种更有效的方法来做到这一点,但这就是我总是在SQL中这样做的方式。