Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql:从包含多行的结果中仅获取一条记录_Sql_Postgresql - Fatal编程技术网

postgresql:从包含多行的结果中仅获取一条记录

postgresql:从包含多行的结果中仅获取一条记录,sql,postgresql,Sql,Postgresql,我已经编写了一个查询,其中列出了所有已应用努力的任务。我写的这个查询,如果同一个任务应用了不同的努力,甚至会被列出 例如,如果task1应用了3种不同的工作,即2.5小时、6小时、3小时,则这些工作将被列出。我试图只列出第一个条目,也就是说,只列出task1有2.5个小时的条目 下面是我编写的查询,它列出了所有与不同表关联的任务: SELECT t.taskid AS id, t.projectid AS project, te.effort AS effort, ((

我已经编写了一个查询,其中列出了所有已应用努力的任务。我写的这个查询,如果同一个任务应用了不同的努力,甚至会被列出

例如,如果task1应用了3种不同的工作,即2.5小时、6小时、3小时,则这些工作将被列出。我试图只列出第一个条目,也就是说,只列出task1有2.5个小时的条目

下面是我编写的查询,它列出了所有与不同表关联的任务:

 SELECT t.taskid AS id,
    t.projectid AS project,
    te.effort AS effort,
    (((t.taskname::text || ' | '::text) || m.milestonename::text) || ' | '::text) || p.projectname::text AS name,
    t.status,
    1 AS version
   FROM task t
     LEFT JOIN timeentry te ON t.taskid = te.taskid
     LEFT JOIN project p ON t.projectid = p.projectid
     LEFT JOIN milestonetask tm ON t.taskid = tm.taskid
     FULL JOIN milestone m ON tm.milestoneid = m.milestoneid
  WHERE m.milestoneid IS NOT NULL
UNION
 SELECT distinct(t.taskid) AS id,
    t.projectid AS project,
    te.effort AS effort,
    (t.taskname::text || ' | (--no milestone--) | '::text) || p.projectname::text AS name,
    t.status,
    1 AS version
  FROM task t 
     LEFT JOIN timeentry te ON t.taskid = te.taskid
     LEFT JOIN project p ON t.projectid = p.projectid
     LEFT JOIN milestonetask tm ON t.taskid = tm.taskid
     FULL JOIN milestone m ON tm.milestoneid = m.milestoneid
  WHERE NOT (tm.taskid IN ( SELECT DISTINCT milestonetask.taskid
           FROM milestonetask
          WHERE milestonetask.milestoneid IS NOT NULL));
下面是我现在得到的结果:

id | project | effort |        name       | status | version 
----+---------+--------+------------------+--------+---------
 89 |       1 |      5 | Coding for clock | Active |       1
 89 |       1 |      2 | Coding for clock | Active |       1
 89 |       1 |      4 | Coding for clock | Active |       1
我尝试为taskid89只设置一行,而不是为同一个任务设置多行,前提是它已经应用了工作


请让我知道,如果我足够清楚,将非常感谢您的帮助和提前感谢。

将整个查询包装到

SELECT DISTINCT(id), * FROM (
<your query>
) subquery;
选择不同的(id),*FROM(
)子查询;

在Postgres中,您可以在上使用
distinct:

with t as (
      <your query here>
     )
select distinct on (id) t.*
from t
order by id;
带t作为(
)
在(id)t上选择distinct*
从t
按id订购;

distinct
不是一个函数
distinct(a),b
distinct a,b
distinct a,(b)
为延迟响应道歉。它成功了,非常感谢:)