1

count ステートメントの結果を他の基準 (複数のテーブル) の結果と組み合わせようとしていて、頭を壁にぶつけています。私のスキルはこの分野では強くなく、ここまで来るのは興味深いものでした。このフェーズの最後の問題は、探している結果が表示されているにもかかわらず、UNION ALL がデータを結合していないことです。
一番下の表 (RESULTS) を見ると、同じシステムの複数のインスタンスが取得されていることがわかります。同じカウントを 2 回呼び出していることに気付きました。おそらく、両方のカウントを正しく表示しようとしているのでしょうが、それを変更しようとするすべての努力が、他の問題を引き起こしました。
最終的には、追加のテーブルから少なくとも 2 つのカウントを追加したいと考えていますが、これが過ぎればそれほど難しくないことを願っています。(カウントが適用されない「systemid」のデータも取得しようとしています。カウントが1つ以上のカウントに特に関連するアイテムのみを返したいです。以下のサンプルテーブルとコードをコピーしました.
どんな助けでも大歓迎です!
Dave

表 1: システム

+-----+-----------+-----------+----------------+  
| sid |   Name    | checkdate | MissingPatches |  
+-----+-----------+-----------+----------------+  
|  52 | WCLDC     |  20130623 |              2 |  
|  79 | WCLVS001  |         0 |              0 |  
| 112 | TAR201    |         0 |              3 |  
| 179 | DOX109N   |  20130603 |              0 |  
| 181 | DOX122T   |  20130520 |              0 |  
| 184 | DOX121T   |  20130411 |              0 |  
| 248 | ROW1767L  |  20130530 |              2 |  
| 251 | ROW1765L  |  20130528 |              1 |  
| 268 | GWR-LAP16 |  20130531 |              3 |  
| 278 | ROW1522L  |  20130420 |              1 |  
| 281 | ROW255L   |  20130509 |              1 |  
| 283 | GWR-LAP03 |  20130413 |              2 |  
| 313 | GMSRT     |  20130623 |              1 |  
| 334 | ROW1517L  |  20130523 |              1 |  
| 335 | ROW1792L  |         0 |              0 |  
| 339 | TEXCE-PC  |         0 |              0 |  
+-----+-----------+-----------+----------------+  

表 2: パッチ

╔═════╦══════════╦══════════╦═══════════╗╔═════╦══════════╦══════════╦═══════════╗sid║patchid承認済み║インストール╠═════╬══════════╬══════════╬═══════════╣52║a34236 ║52║B54656║1 1║0║║251║gfd841║1 281║H46831║1 ║0 ║ 0 ║ ╚═════╩══════════╩══════════╩═══════════════════════════════


コード:

SELECT
  systems.sid, systems.Name, systems.checkdate,
  SUM(0) as MissingPatches
FROM (
  patches LEFT JOIN Systems
  ON Systems.Sid = patches.Sid
)
WHERE (
  STR_TO_DATE(systems.checkdate, '%Y%m%d') < CURDATE() - INTERVAL 14 DAY
)
GROUP BY SYSTEMS.Sid 

UNION ALL

SELECT
  systems.sid, systems.Name, systems.checkdate,
  count(approved) as MissingPatches
FROM (
  patches LEFT JOIN Systems
  ON Systems.Sid = patches.Sid
)
WHERE patches.Approved = 1
  AND patches.Installed = 0
  AND Patches.Sid = systems.Sid
GROUP BY patches.Sid
HAVING COUNT(approved) > 0
ORDER BY Sid

結果:

+-----+-----------+-----------+----------------+  
| sid |   Name    | checkdate | MissingPatches |  
+-----+-----------+-----------+----------------+  
|  79 | WCLVS001  |         0 |              0 |   
| 112 | TAR201    |         0 |              0 |  
| 112 | TAR201    |         0 |              3 |  
| 179 | DOX109N   |  20130603 |              0 |  
| 181 | DOX122T   |  20130520 |              0 |  
| 184 | DOX121T   |  20130411 |              0 |  
| 248 | ROW1767L  |  20130530 |              0 |  
| 248 | ROW1767L  |  20130530 |              2 |  
| 251 | ROW1765L  |  20130528 |              0 |  
| 251 | ROW1765L  |  20130528 |              1 |  
| 268 | GWR-LAP16 |  20130531 |              0 |  
| 268 | GWR-LAP16 |  20130531 |              3 |  
| 278 | ROW1522L  |  20130420 |              0 |  
| 278 | ROW1522L  |  20130420 |              1 |  
| 281 | ROW255L   |  20130509 |              0 |  
| 281 | ROW255L   |  20130509 |              1 |  
| 283 | GWR-LAP03 |  20130413 |              0 |  
| 283 | GWR-LAP03 |  20130413 |              2 |  
| 313 | GMSRT     |  20130623 |              1 |  
| 334 | ROW1517L  |  20130523 |              0 |  
| 335 | ROW1792L  |         0 |              0 |  
| 335 | ROW1792L  |         0 |             23 |  
| 339 | TEXCE-PC  |         0 |              0 |  
+-----+-----------+-----------+----------------+  
4

1 に答える 1