0

ここでは、実際に同じように見えるものは何も表示されませんが、SQLをそれほど長く実行していないのは私だけかもしれません。

したがって、マスターテーブルTestTempGeneralInfoとdailTestTaskGeneralInfoがあります。私はこのクエリを使用できます:

SELECT testtempgeneralinfo.issueid, 
       Max(testtaskgeneralinfo.effectivetime) 
FROM   testtaskgeneralinfo 
       INNER JOIN testtempgeneralinfo 
               ON testtaskgeneralinfo.testtemplateid = 
                  testtempgeneralinfo.issueid 
WHERE  testtempgeneralinfo.projectid = 150 
GROUP  BY testtempgeneralinfo.issueid 

TestTaskGeneralInfoテーブルのMAXを有効時間で表示します。

しかし、同じ列TestTempGeneralInfoを更新するクエリを作成するのに苦労しています。誰か助けてもらえますか?これがばかげた質問ではないことを願っています。ありがとう

4

2 に答える 2

1

これを行うにはいくつかの方法がありますが、最も簡単なのは、上記のクエリを取得して共通のテーブル式にし、更新ステートメントを CTE に結合することです。

    ;WITH MaxDate AS
    ( SELECT testtemplateid, Max(effectivetime) as MaxEffectiveTime
      FROM testtaskgeneralinfo
      GROUP BY testtemplateid)
    UPDATE testtempgeneralinfo 
    SET effectivetime = MaxEffectiveTime
    FROM   MaxDate 
    INNER JOIN testtempgeneralinfo 
           ON MaxDate.testtemplateid = testtempgeneralinfo.issueid 
    WHERE  testtempgeneralinfo.projectid = 150 

編集:申し訳ありませんが、コピー/貼り付けエラーが少しありました。ただし、上記は、最新の testtaskgeneralinfo の有効時間で testtempgeneralinfo の有効時間を更新したいと考えていることを前提としています。

于 2013-03-06T21:09:46.107 に答える
0

あなたの質問を理解しているかどうかわかりません。私はそれが次のように理解しています:

「上記のクエリが与えられた場合、最大有効時間を含む行を新しい値で更新するにはどうすればよいですか?」

issueid が主キーであると仮定すると、答えは次のようになります。

update testtempgeneralinfo
set
  effectivetime = getdate()  --columns and values will vary...
where issueid = (
  SELECT top 1 testtempgeneralinfo.issueid
  FROM
    testtaskgeneralinfo 
    INNER JOIN
    testtempgeneralinfo 
    ON testtaskgeneralinfo.testtemplateid = testtempgeneralinfo.issueid 
    WHERE testtempgeneralinfo.projectid = 150 
    order by
      testtaskgeneralinfo.effectivetime desc
  );
于 2013-03-06T21:11:03.190 に答える