0

したがって、私が使用している次のクエリは 4 行を生成します。

SELECT 
  `DMV`.`id` AS `dmvID`,
  `D`.`id` AS `documentID`,
  `DMV`.`name` AS `documentName`,
  `U`.`username` AS `creatorUserName`,
  `D`.`folder_id` AS `folderID`,
  `D`.`created` AS `createDate`,
  `SL`.`name` AS `statusName`,
  `UM`.`username` AS `modifiedUserName`,
  `DMV`.`version_created` AS `modifiedDate`,
  `UO`.`username` AS `ownerUserName`,
  `DTL`.`name` AS `documentTypeName` 
FROM 
  `document_metadata_version` `DMV`
  LEFT JOIN `documents` `D` 
    ON `DMV`.`document_id` = `D`.`id`
  LEFT JOIN `users` `U` 
    ON `D`.`creator_id` = `U`.`id`
  LEFT JOIN `users` `UM` 
    ON `D`.`modified_user_id` = `UM`.`id`
  LEFT JOIN `users` `UO` 
    ON `D`.`owner_id` = `UO`.`id`
  LEFT JOIN `status_lookup` `SL` 
    ON `D`.`status_id` = `SL`.`id`
  LEFT JOIN `document_types_lookup` `DTL` 
    ON `DMV`.`document_type_id` = `DTL`.`id`
WHERE
    DMV.document_id = 543433
;

簡潔にするために、当面の質問に関係のない無関係なフィールドはすべて省略します。dmvIDand documentTypeName(最初と最後の列)の結果は次のとおりです。

+--------+------------------+
| dmvID  | documentTypeName |
+--------+------------------+
| 566053 | Default          |
| 566183 | Default          |
| 681391 | ASCO Documents   |
| 681411 | ASCO Documents   |
+--------+------------------+

興味深いのは最後の行だけなので、当然、SELECT ステートメントを変更して MAX() on を使用しますdmvID

SELECT 
  MAX(`DMV`.`id`) AS `dmvID`,
# Rest of query unchanged

それは次を返します:

+--------+------------------+
| dmvID  | documentTypeName |
+--------+------------------+
| 681411 | Default          |
+--------+------------------+

上記から、681411 は実際には MAX() ですが、関連付けられている値は 681411documentTypeNameと同等の値ではないことに注意してください。566053dmvIDに一致しているとdmvID思います。

+--------+------------------+
| dmvID  | documentTypeName |
+--------+------------------+
| 681411 | ASCO Documents   |
+--------+------------------+
4

1 に答える 1

3

その列の最大値を持つ 1 つの行のみが必要な場合は、(MAX() を使用した集計クエリの代わりに) ORDER BY と LIMIT 1 を使用します。

...
WHERE
DMV.document_id = 543433
ORDER BY dmvID DESC
LIMIT 1;
于 2012-07-05T16:33:37.177 に答える