SQL在1列中选择唯一值

All*_*iah 6 sql

我有问题(我想有点问题),我希望,你会帮助我的.我使用Sybase Anywhere,这是我的代码:

SELECT TOP 4 Person.Id_person, Person.Name, Person.Surname, Visit.Date, Visit.Place
From Person, Visit
WHERE Visit.Id_person = Person.Id_person
ORDER BY Visit.DATE DESC
Run Code Online (Sandbox Code Playgroud)

这是结果:

3  | Paul | McDonald | 2010-01-19 | Ohio
3  | Paul | McDonald | 2010-01-18 | New York
19 | Ted  | Malicky  | 2009-12-24 | Tokyo
12 | Meg  | Newton   | 2009-10-13 | Warsaw
Run Code Online (Sandbox Code Playgroud)

我不想复制保罗麦克唐纳,并且只有第一次(按日期)访问.我想得到这样的结果:

3  | Paul | McDonald | 2010-01-19 | Ohio
19 | Ted  | Malicky  | 2009-12-24 | Tokyo
12 | Meg  | Newton   | 2009-10-13 | Warsaw
 ....
Run Code Online (Sandbox Code Playgroud)

我该怎么办?你可以帮帮我吗?:(

And*_*mar 1

您可以添加一个where not exists子句来过滤掉较早的访问:

SELECT TOP 4 p1.Id_person, p1.Name, p1.Surname, v1.Date, v1.Place
FROM Person p1, Visit v1
WHERE p1.Id_person = v1.Id_person
AND NOT EXISTS (
    SELECT *
    From Person p2, Visit v2
    WHERE v2.Id_person = p2.Id_person
    AND p1.Id_person = p2.Id_person
    AND v2.Date > v1.Date
)
ORDER BY v1.DATE DESC
Run Code Online (Sandbox Code Playgroud)

为了提高可读性,请考虑将双精度重写from为联接。例如,更改:

FROM Person v1, Visit v1
WHERE v1.Id_person = p1.Id_person
Run Code Online (Sandbox Code Playgroud)

进入:

FROM Person p1
INNER JOIN Visit v1 ON v1.Id_person = p1.Id_person
Run Code Online (Sandbox Code Playgroud)