Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用MAX函数编写查询时遇到问题_Sql_Oracle_Greatest N Per Group_Oracle12c - Fatal编程技术网

Sql 使用MAX函数编写查询时遇到问题

Sql 使用MAX函数编写查询时遇到问题,sql,oracle,greatest-n-per-group,oracle12c,Sql,Oracle,Greatest N Per Group,Oracle12c,我有一个用户对产品的评论表: FBID L_ID Comments Comments_TS User 110 9885 Testing counting of feedback IDs 07-APR-17 02.52.01.495927000 PM AMOWIN 111 9885 Test how adding additional comments 07-APR-17 02.52.

我有一个用户对产品的评论表:

FBID  L_ID  Comments                            Comments_TS                User
110   9885  Testing counting of feedback IDs    07-APR-17 02.52.01.495927000 PM     AMOWIN
111   9885  Test how adding additional comments 07-APR-17 02.52.56.357410000 PM     AMOWIN
112   9911  Test the duplication of plans on    07-APR-17 03.09.27.885587000 PM     AMOWIN
113   9950  Testing pending for source doc      10-APR-17 12.03.19.303782000 PM     AMOWIN
116  10218  testing initial feedback sent       02-MAY-17 09.55.59.174925000 AM     AMOWIN
126  12758  Testing Feedback, Get Next Disabled 12-JUN-17 09.41.15.979093000 AM     AMOWIN
127  12758  jjjjjjjjjjjjjjjjjjjjjjjjjjjjj       12-JUN-17 11.17.23.742109000 AM     MABAXT
128  12758  Testing status                      12-JUN-17 12.05.32.354178000 PM     SWMART
129  12758  Testing returning to CSE            12-JUN-17 12.06.09.276945000 PM     AMOWIN
130  12758  2nd Test                            12-JUN-17 01.52.08.540984000 PM     AMOWIN
我需要做的是只获取带有最后(即最近)评论的记录。我已经试过了,但还差一点:

SELECT MAX(Comments_TS), L_ID, COMMENTS 
FROM F_FEEDBACK FB1 
Group By L_ID, Comments;

我需要最终通过L_ID(Line_ID的缩写)将其链接回product表,因此我需要对每个L_ID进行最后一次注释(通过comment_TS字段,这是一个时间戳)。我使用的是Oracle 12C,但如果有人可以直接使用SQL,我可以从中找出答案。我不知道为什么我今天没办法解决这个问题。

这不是你想要的吗

select fb.*
from f_feedback
order by comments_ts desc
fetch first 1 row only;
如果每个
l\u id
都需要此代码,请使用
row\u number()


如果您希望所有注释都具有相同的最新时间戳,那么请使用
rank()
而不是
row\u number()

这不是您想要的吗

select fb.*
from f_feedback
order by comments_ts desc
fetch first 1 row only;
如果每个
l\u id
都需要此代码,请使用
row\u number()


如果您希望所有注释都具有相同的、最新的时间戳,那么请使用
rank()
而不是
row\u number()

,我将使用
MAX…KEEP..densite\u rank
方法编写此注释

select l_id, 
       max(comments) keep ( dense_rank first order by comments_ts desc), 
       max(comments_ts) 
from d
group by l_id;

我不久前做的一些非正式基准测试(可能已经过时)表明,这比分析的
row_number()
方法使用的资源(特别是内存)要少。

我会用
MAX…KEEP..densite_-RANK
方法写这篇文章

select l_id, 
       max(comments) keep ( dense_rank first order by comments_ts desc), 
       max(comments_ts) 
from d
group by l_id;

我不久前做的一些非正式基准测试(可能已经过时)表明,这比分析的
行数()方法使用的资源(特别是内存)要少。

可能意味着从第二个查询中删除
仅获取第一行
,我确实需要l\u id,但您的代码总共只返回了一行。每个L_id至少应该有一行。@Arondietz-我想你是对的,当我把那行拿出来时,它似乎起作用了。@JohnnyBones-你说每个
L_id至少有一行是什么意思?对于相同的
L\u ID
,是否可以有两个时间戳完全相同的注释?如果是这样的话,您需要同时返回两个吗?如果超过两个,您需要全部返回吗?这就是马修的聚合解决方案的弱点;在这种情况下,每个
L_ID
只能返回一行,并且需要Gordon的分析函数方法。但是,要获取具有最新时间戳的所有行,您必须将
行编号
更改为
(其他内容保持不变)。@mathguy您是对的。但是,在一个由人输入注释并且要求显示最新注释的系统中,我无法想象他们会希望看到两条“最新”注释,因为它们恰好在毫微秒的时间内出现。可能是为了从第二个查询中删除
仅获取第一行
,我确实需要l_id,但是您的代码总共只返回了1行。每个L_id至少应该有一行。@Arondietz-我想你是对的,当我把那行拿出来时,它似乎起作用了。@JohnnyBones-你说每个
L_id至少有一行是什么意思?对于相同的
L\u ID
,是否可以有两个时间戳完全相同的注释?如果是这样的话,您需要同时返回两个吗?如果超过两个,您需要全部返回吗?这就是马修的聚合解决方案的弱点;在这种情况下,每个
L_ID
只能返回一行,并且需要Gordon的分析函数方法。但是,要获取具有最新时间戳的所有行,您必须将
行编号
更改为
(其他内容保持不变)。@mathguy您是对的。但是,在一个由人输入注释并且要求显示最新注释的系统中,我无法想象他们会希望看到两条“最新”注释,因为它们恰好以毫微秒的速度出现。我同意-如果只需要这个聚合查询(似乎是这样的情况),然后用解析函数来模拟它会做太多的工作,我选择了这个,因为它看起来更简单,对我来说很有效,但两个答案都有效。我给马特打勾只是因为戈登已经有很多代表了o) 我同意——如果只需要这个聚合查询(似乎是这样),那么用分析函数模拟它就太麻烦了。我之所以这么做,是因为它看起来更简单,对我来说也有效,但两个答案都有效。我给马特打勾只是因为戈登已经有很多代表了o)
select l_id, 
       max(comments) keep ( dense_rank first order by comments_ts desc), 
       max(comments_ts) 
from d
group by l_id;