如何获得价值最高的排?
我得到了这样的查询如何获得价值最高的排?
SELECT
IMAGE_PATH, IMAGE_ID, DOC_NID
FROM
TBL_IMAGE WHERE IMAGE_ORD = 1
并有后续条件
- image_ord应该BR改为image_ord =最大值
- image_ord列号码类型,它有一些重复
- 我只需要一个最大值的image_ord
- 它可以处理与rownum处理,但我不想因为它有很多层(这是子查询)
是否可以在没有子查询的情况下处理?
根据您的要求:
“image_ord [...]有一些重复”
“我只需要一排用的最大价值image_ord“
WITH C AS (SELECT MAX(IMAGE_ORD) M FROM TBL_IMAGE)
SELECT
TBL_IMAGE.IMAGE_PATH, TBL_IMAGE.IMAGE_ID, TBL_IMAGE.DOC_NID
FROM
TBL_IMAGE JOIN C ON IMAGE_ORD = C.M
WHERE ROWNUM < 2
- 的
WITH ...
语句将获取最大价值,为image_ord
场 - 的
SELECT ...
语句将临时表上使用JOIN
上述 - 的
WHERE ROWNUM < 2
将结果的数量限制为1排
请注意,如果没有(明确的)ORDER BY
子句,SELECT
语句的结果应视为无序的一组行。所以在重复的情况下,你不应该依赖任何特定的行(甚至是同一行)被返回。只需“一”行具有最大值image_ord
价值。
感谢您的回答。我也担心image_ord值的重复,但我不知道如何避免这种情况。无论如何,我喜欢你的精彩答案,特别是使用'with'。这使得更清晰,更好:D非常感谢b – 2014-09-19 14:17:44
试试这个:
SELECT
IMAGE_PATH, IMAGE_ID, DOC_NID, Max(image_ord)
FROM
TBL_IMAGE WHERE IMAGE_ORD = 1 group by IMAGE_PATH, IMAGE_ID, DOC_NID
那么,如果你搜索'max(image_ord)',那么'where image_ord = 1'语句不合适。 – yamny 2014-09-19 09:18:13
那么只要在这种情况下删除条件可能会有所帮助? – 2014-09-19 09:21:24
我解决了我自己的问题跟随查询。 无论如何,我不得不使用子查询,并添加一些额外的功能,在大括号中使用。
select
doc_nid, max(image_ord) as image_ord
from
(
select
doc_nid, nvl(image_ord, 0) as image_ord
from
tbl_image
where
doc_nid is not null
)
group by doc_nid
这是不是很清楚,我:如果_“image_ord [...]有一些重复” _和_你“只需要一排与image_ord的最大价值” _你怎么不同的区分具有相同最大'image_ord'的行? – 2014-09-19 08:43:20
@SylvainLeroux它有几行的值为1.我知道这是错误的DB计划,但它不是一个序列,只是数字类型列。无论如何,当我按'排序'时,第一行总是相同的。 – 2014-09-19 09:08:19
'ORDER BY'是什么?如果这是'ORDER BY IMAGE_ORG',那么不应该依赖这样的事实:对于_same_“IMAGE_ORG”值,以任何特定顺序检索行。 – 2014-09-19 09:28:53