当用户选择查看最近记录的选项时,我有要求显示最新记录。我有3个不同的表格,我可以从中获取数据并显示在屏幕上。仅显示最近记录
下面是创建的示例表。
Create table one(sealID integer,product_ser_num varchar2(20),create_time timestamp,status varchar2(10));
create table two(transID integer,formatID integer, formatStatus varchar,ctimeStamp timestamp,sealID integer);
create table three(transID integer,fieldStatus varchar,fieldValue varchar,exctype varchar);
我加入了3个表格,并在单个屏幕上显示结果。我想根据时间戳显示最近的记录。 请从3个不同的表中找到屏幕上的样本数据。
ProductSerialNumber formatID formatStatus fieldStatus TimeStamp
ASD100 100 P P 2015-09-03 10:30:22
ASD100 200 p P 2015-09-03 10:30:22
ASD100 100 p P 2015-09-03 10:22:11
ASD100 200 p P 2015-09-03 10:22:11
我想显示由以上显示表,应该返回前两排,因为他们最近的记录时与时间戳列检查最近的记录。
请建议对下列查询进行哪些更改才能显示最近的记录。
SELECT transId,product_ser_num,status, to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss') timestamp,
cnt
FROM (SELECT one.*,
row_number() over(ORDER BY
CASE
WHEN :orderDirection like '%asc%' THEN
CASE
WHEN :orderBy='product_ser_num' THEN product_ser_num,
WHEN :orderBy='status' THEN status
WHEN :orderBy='timestamp' THEN to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss')
ELSE to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss')
END
END ASC,
CASE
WHEN :orderDirection like '%desc%' THEN
CASE
WHEN :orderBy='product_ser_num' THEN product_ser_num,
WHEN :orderBy='status' THEN status
WHEN :orderBy='timestamp' THEN to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss')
ELSE to_char(timestamp, 'yyyy-mm-dd hh24:mi:ss')
END
END DESC , transId ASC) line_number
FROM (select one_inner.*, COUNT(1) OVER() cnt
from (select two_tran.transaction_id,
one_res.product_serial_number productSerialNumber,
one_res.status status,from one one_res
left outer join two two_trans on two_trans.sealID = one_res.sealID
left outer join three three_flds on two_tran.transID = three_flds.transID and (three_flds.fieldStatus = 'P')
始终将您的Oracle数据库版本发布至4位小数位。并请张贴样本数据,不要张贴图片,它根本没有帮助。请发布创建和插入语句,并发布所需的输出。 –
oracle10g是使用的版本。当我看到图像时,我想它会给出清晰的表格结构图。要求是显示最近的记录。 @lalith kumar B – scrit
很难看到图像,也不可能从图像中复制文本。您可以准备[SQL小提琴](http://sqlfiddle.com/)或在问题中发布创建和插入语句。 –