我正在编写一个查询,我首先将数据排序为一个人的唯一标识符,然后创建日期......
因此,对于每个新实例,我只需要该行的唯一ID ...其余的可以丢弃。我尝试了一个嵌套的select语句:
SELECT d.full_name as "Name",
d.id as "Unique Identifier",
s.service_name as "service",
t.create_date as "date created"
from
data d,
transaction t,
system s
where
...
s.system = 251
order by d.id, t.create_date desc
我每次都会收到错误,因为我认为我没有正确使用组。只获取新唯一标识符的第一个实例并抛弃其余标识符的最佳方法是什么?
编辑:
以下是一些示例数据:
Name Unique Identifier service date created
john doe 1 eca 1/14/2008
john doe 1 ecb 1/10/2008
john doe 1 eca 11/12/2007
henry ford 2 ford1 06/07/2010
henry ford 2 ford2 08/09/2009
jack johnson 4 burgers1 11/01/2013
jack johnson 4 burgers2 09/06/2007
所以我想要的是打印这些行:
john doe 1 eca 1/14/2008
henry ford 2 ford1 06/07/2010
jack johnson 4 burgers1 11/01/2013
这是每个人最近的请求..但每行仍然可能有不同的数据。
答案 0 :(得分:1)
如果我正在读你的问题,我相信你想要每个唯一ID的第一行吗?
编辑:添加示例数据后,您可以更轻松地了解所需内容。
由于您没有添加数据库结构,我的查询只涉及一个表,而不是三个作为您的示例查询,因为我无法分辨它们是如何连接的。应该很容易使查询适应正确的表和连接。
以下查询应该这样做:
SELECT
t1.full_name AS "Name",
t1.id AS "Unique Identifier",
t1.service_name AS "Service",
t1.create_date AS "Date created"
FROM table1 t1,
(SELECT id, MAX(create_date) AS last_date
FROM table1
GROUP BY id) t2
WHERE t1.id = t2.id
AND t1.create_date = t2.last_date
ORDER BY t1.id
请参阅this sample SQL Fiddle(Oracle 11g R2)以获取示例。
上述查询的输出:
| NAME | UNIQUE IDENTIFIER | SERVICE | DATE CREATED |
|--------------|-------------------|----------|---------------------------------|
| john doe | 1 | eca | January, 14 2008 01:00:00+0000 |
| henry ford | 2 | ford1 | June, 07 2010 02:00:00+0000 |
| jack johnson | 4 | burgers1 | November, 01 2013 01:00:00+0000 |