0

複数の SQL ステートメントを含む MySQL ステートメントを作成しようとしています。

私がやろうとしていること:
2 つのテーブルを取得します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) 

表:ジライシュー

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 年より前に更新されたプロジェクト (project.pname) の名前 (jiraissue.UPDATED) を取得することです。

例:最新号が 2012 年 11 月 21 日に更新され
たプロジェクトABCを取得します。Project XYZのもう 1 つの最新号は、2011 年 8 月 12 日に最後に更新されました。したがって、私の SQL スクリプトは、最初のABCではなく、 2 番目のプロジェクトXYZ
の名前を教えてくれるはずです。

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'

これで、必要なすべての主要な情報が得られます。2012 年以降のプロジェクトを除外するために、group by の後に HAVING 句が適用されます。あなたのサンプルが説明したように、それを 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

give it a try with this

  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 に答える