0

私は3つのテーブルを持っています

table1      
PCName      PCID
PC1     001
PC2     002
PC3     003

table2
PCID        LastOnline
001     01.02.13
002     05.01.13
003     04.03.13

table3
PCID        PatchInstall
001     03.02.13
001     05.02.13
001     01.02.13
002     06.02.13
002     08.02.13            
003     01.02.13
003     09.02.13
003     10.02.13

I can get the information together like this
PCID    PCName  LastOnline  PatchInstall
001     PC1     01.02.13    03.02.13
001     PC1     01.02.13    05.02.13
001     PC1     01.02.13    01.02.13
002     PC2     05.01.13    06.02.13
002     PC2     05.01.13    08.02.13            
003     PC3     04.03.13    01.02.13
003     PC3     04.03.13    09.02.13
003     PC3     04.03.13    10.02.13

ただし、PatchInstallの日付が最新のPCごとにのみ記録を残したいと思います。GROUP BYコマンドで試してみましたが、うまくいきませんでした。

誰かがそれを可能にする方法を知っていますか?

4

4 に答える 4

2

これを試して:

SELECT 
  t1.pcid,
  t2.name,
  t2.LastOnLine,
  t3.LatestPatchInstall
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.pcid = t2.pcid
INNER JOIN
(
  SELECT pcid, MAX(PatchInstall) AS LatestPatchInstall
  FROM table3
  GROUP BY pcid
) AS t3 ON t1.pcid = t3.pcid
于 2013-03-25T09:33:19.057 に答える
0

table1とが1対1の関係にあると仮定すると、これは次の関数table2を使用するのと同じくらい簡単です。MAX

SELECT t1.PCID, PCName, LastOnline, MAX(PatchInstall) AS PatchInstall
FROM table1 t1
INNER JOIN table2 t2 ON t1.PCID = t2.PCID
LEFT OUTER JOIN table3 t3 ON t1.PCID = t3.PCID
GROUP BY t1.PCID, PCName, LastOnline

1対1の関係でない場合は、ペアごとに1table1つの行を取得します。table2

于 2013-03-25T09:33:01.670 に答える
0

試す:

SELECT
  max(PatchInstall) over (partition by PCName)
FROM YourTable
于 2013-03-25T09:34:22.937 に答える
0

それを行う別の簡単な方法はCTEROW_NUMBER()

;WITH CTE AS
(
   SELECT T1.PCName,
          T2.LastOnline,
          T3.PatchInstall,
          ROW_NUMBER() OVER (PARTITION BY T1.PCID ORDER BY T3.PatchInstall DESC) AS RNK
   FROM Table1 T1
   INNER JOIN Table2 T2 ON T2.PCID = T1.PCID
   INNER JOIN Table3 T3 ON T3.PCID = T1.PCID
)


SELECT * FROM CTE
WHERE RNK = 1

SQL FIDDLE DEMO

于 2013-03-25T09:49:22.313 に答える