0

我尝试使用多个 SQL 语句创建一个 MySQL 语句。

我想做的是:
我得到两张桌子,project& jiraissue

表:项目

Columns:
ID  decimal(18,0) PK 
pname   varchar(255) 
URL varchar(255) 
LEAD    varchar(255) 
DESCRIPTION text 
pkey    varchar(255) 
pcounter    decimal(18,0) 
ASSIGNEETYPE    decimal(18,0) 

表:jiraissue

Columns:
ID  decimal(18,0) PK 
pkey    varchar(255) 
PROJECT decimal(18,0) 
REPORTER    varchar(255) 
ASSIGNEE    varchar(255) 
issuetype   varchar(255) 
SUMMARY varchar(255) 
DESCRIPTION longtext 
ENVIRONMENT longtext 
PRIORITY    varchar(255) 
RESOLUTION  varchar(255) 
issuestatus varchar(255) 
CREATED datetime 
UPDATED datetime 
DUEDATE datetime 
VOTES   decimal(18,0) 
TIMEORIGINALESTIMATE    decimal(18,0) 
TIMEESTIMATE    decimal(18,0) 
TIMESPENT   decimal(18,0) 
WORKFLOW_ID decimal(18,0) 
SECURITY    decimal(18,0) 
FIXFOR  decimal(18,0) 
COMPONENT   decimal(18,0) 

我的目标是获取 2012 年之前更新的最新问题 (jiraissue.UPDATED) 的项目名称 (project.pname)。

示例:
我得到了一个 Project ABC,它的最新问题是 21.11.2012 更新的。另一个 Project XYZ的最新一期最后更新于 08.12.2011。
所以我的 SQL 脚本应该给我第二个项目XYZ的名称,而不是第一个ABC

这里有一个工作脚本来找出哪个问题是最新的带有 STATIC 项目 ID 的问题:

SELECT 
    pkey
FROM
    jiraissue
WHERE
    UPDATED = (SELECT 
            max(UPDATED)
        FROM
            jiraissue
        WHERE
            PROJECT = 10472)

但是现在脚本怎么样,当我想要所有这些项目的项目名称时?我所有的尝试都需要大量的处理时间并返回一个未定义的错误......

编辑: 现在我得到以下代码:

select 
    p.pname, j.pkey
from
    project p
        inner join
    jiraissue j ON j.ID = (select 
            PROJECT
        from
            jiraissue
        where
            UPDATED = (SELECT 
                    max(UPDATED)
                from
                    jiraissue))
        AND p.ID = j.PROJECT

结果只是第一个键最低的项目......我如何浏览所有项目?

编辑:

select 
    p.pname, j.pkey, j.UPDATED
from
    project p
        inner join
    jiraissue j
where
    j.ID = (select 
            PROJECT
        from
            jiraissue
        where
            UPDATED = (SELECT 
                    max(UPDATED)
                from
                    jiraissue
                where
                    UPDATED < '2012-01-01 00:00:00'))
        and p.ID = j.PROJECT

它显示了我想要的所有内容。但只是第一个项目。所以我需要所有项目!我如何不仅选择 1 个项目,而且选择所有项目?

4

2 回答 2

1

先从你想要什么开始。在每个项目的基础上,2012 年之前更新的最新问题是什么。暂时忽略项目表。

select
      JI.Project,
      MAX( JI.Updated ) as LastUpdated
   from
      JiraIssue JI
   group by
      JI.Project
   having 
      LastUpdated < '2012-01-01'

现在,这将为您提供所需的所有主要信息。在 group by 之后应用 HAVING 子句以排除 2012 年和未来的任何项目。您不能将它作为 WHERE 子句应用,因为您的示例描述了您不想要任何有电流的东西(例如您的 ABC 项目)并且只想要 XYZ 项目。

通过加入项目表并通过该项目/更新组合再次加入 JiraIssue 表,以此作为获取其余数据的基础

select
      P.*,
      JI2.*
   from
      ( select
              JI.Project,
              MAX( JI.Updated ) as LastUpdated
           from
              JiraIssue JI
           group by
              JI.Project
           having 
              LastUpdated < '2012-01-01' ) PreQuery

         JOIN Project P
            on PreQuery.Project = P.ID

         JOIN JiraIssue JI2
            on PreQuery.Project = JI2.Project
           AND PreQuery.LastUpdated = JI2.Updated
于 2012-11-30T14:56:35.667 回答
0

试试这个

  SELECT pname FROM project p
  INNER JOIN jiraissue j
   ON p.ID = (SELECT  ID
                FROM jiraissue
                WHERE
               UPDATED = (SELECT  max(UPDATED)
                FROM jiraissue ))
于 2012-11-30T10:51:00.537 回答