Sql 在Oracle中获取给定日期的最新条目
我想选择Sql 在Oracle中获取给定日期的最新条目,sql,oracle,greatest-n-per-group,sysdate,Sql,Oracle,Greatest N Per Group,Sysdate,我想选择 data12 [last entry for 12-21-2014], data11 [last entry for 12-20-2014], data8 [last entry for 12-19-2014] 从下表中选择 snapshot_datestamp data ------------------------------- 12-21-2014 08:24:21 data12 12-20-2014 19:58:49 data11
data12 [last entry for 12-21-2014],
data11 [last entry for 12-20-2014],
data8 [last entry for 12-19-2014]
从下表中选择
snapshot_datestamp data
-------------------------------
12-21-2014 08:24:21 data12
12-20-2014 19:58:49 data11
12-20-2014 19:55:36 data10
12-20-2014 19:53:59 data9
12-19-2014 21:56:23 data8
12-19-2014 21:13:16 data7
12-19-2014 11:05:45 data6
12-19-2014 11:05:07 data5
12-19-2014 10:56:13 data4
12-19-2014 10:52:21 data3
12-19-2014 10:50:43 data2
12-19-2014 10:49:30 data1
不太清楚如何实现这一点。任何指针都会有很大帮助。简单的方法是使用
orderby
和ROWNUM
SELECT *
FROM (SELECT data
FROM tablename
WHERE trunc(snapshot_datestamp) = TO_DATE('12-21-2014','MM-DD-YYYY')
ORDER BY snapshot_datestamp DESC)
WHERE ROWNUM = 1;
简单的方法是使用
orderby
和ROWNUM
SELECT *
FROM (SELECT data
FROM tablename
WHERE trunc(snapshot_datestamp) = TO_DATE('12-21-2014','MM-DD-YYYY')
ORDER BY snapshot_datestamp DESC)
WHERE ROWNUM = 1;
简单的方法是使用
orderby
和ROWNUM
SELECT *
FROM (SELECT data
FROM tablename
WHERE trunc(snapshot_datestamp) = TO_DATE('12-21-2014','MM-DD-YYYY')
ORDER BY snapshot_datestamp DESC)
WHERE ROWNUM = 1;
简单的方法是使用
orderby
和ROWNUM
SELECT *
FROM (SELECT data
FROM tablename
WHERE trunc(snapshot_datestamp) = TO_DATE('12-21-2014','MM-DD-YYYY')
ORDER BY snapshot_datestamp DESC)
WHERE ROWNUM = 1;
一种方法是获取每天的最新时间,然后选择相应的记录:
select
trunc(snapshot_datestamp),
data
from mytable
where snapshot_datestamp in
(
select max(snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
)
order by trunc(snapshot_datestamp);
另一种是使用分析函数:
select
trunc(snapshot_datestamp),
max(data) keep (dense_rank last order by snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
order by trunc(snapshot_datestamp);
一种方法是获取每天的最新时间,然后选择相应的记录:
select
trunc(snapshot_datestamp),
data
from mytable
where snapshot_datestamp in
(
select max(snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
)
order by trunc(snapshot_datestamp);
另一种是使用分析函数:
select
trunc(snapshot_datestamp),
max(data) keep (dense_rank last order by snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
order by trunc(snapshot_datestamp);
一种方法是获取每天的最新时间,然后选择相应的记录:
select
trunc(snapshot_datestamp),
data
from mytable
where snapshot_datestamp in
(
select max(snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
)
order by trunc(snapshot_datestamp);
另一种是使用分析函数:
select
trunc(snapshot_datestamp),
max(data) keep (dense_rank last order by snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
order by trunc(snapshot_datestamp);
一种方法是获取每天的最新时间,然后选择相应的记录:
select
trunc(snapshot_datestamp),
data
from mytable
where snapshot_datestamp in
(
select max(snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
)
order by trunc(snapshot_datestamp);
另一种是使用分析函数:
select
trunc(snapshot_datestamp),
max(data) keep (dense_rank last order by snapshot_datestamp)
from mytable
group by trunc(snapshot_datestamp)
order by trunc(snapshot_datestamp);
假设我们在这里使用的数据中没有任何键,那么使用可能是一种解决方案:
SELECT "snapshot_datestamp", "data" FROM
(
SELECT "snapshot_datestamp", "data",
ROW_NUMBER()
OVER (PARTITION BY TRUNC("snapshot_datestamp")
ORDER BY "snapshot_datestamp" DESC) rn
FROM T
) V
WHERE rn = 1
ORDER BY 1 DESC
这里的想法是为给定日期的每一行编号(根据“时间戳”按降序排列)。一旦完成,每个分区的“最后一个”条目就是该分区中编号为1的行
请参见假设我们在此处使用的数据中没有任何键,使用可能是一种解决方案:
SELECT "snapshot_datestamp", "data" FROM
(
SELECT "snapshot_datestamp", "data",
ROW_NUMBER()
OVER (PARTITION BY TRUNC("snapshot_datestamp")
ORDER BY "snapshot_datestamp" DESC) rn
FROM T
) V
WHERE rn = 1
ORDER BY 1 DESC
这里的想法是为给定日期的每一行编号(根据“时间戳”按降序排列)。一旦完成,每个分区的“最后一个”条目就是该分区中编号为1的行
请参见假设我们在此处使用的数据中没有任何键,使用可能是一种解决方案:
SELECT "snapshot_datestamp", "data" FROM
(
SELECT "snapshot_datestamp", "data",
ROW_NUMBER()
OVER (PARTITION BY TRUNC("snapshot_datestamp")
ORDER BY "snapshot_datestamp" DESC) rn
FROM T
) V
WHERE rn = 1
ORDER BY 1 DESC
这里的想法是为给定日期的每一行编号(根据“时间戳”按降序排列)。一旦完成,每个分区的“最后一个”条目就是该分区中编号为1的行
请参见假设我们在此处使用的数据中没有任何键,使用可能是一种解决方案:
SELECT "snapshot_datestamp", "data" FROM
(
SELECT "snapshot_datestamp", "data",
ROW_NUMBER()
OVER (PARTITION BY TRUNC("snapshot_datestamp")
ORDER BY "snapshot_datestamp" DESC) rn
FROM T
) V
WHERE rn = 1
ORDER BY 1 DESC
这里的想法是为给定日期的每一行编号(根据“时间戳”按降序排列)。一旦完成,每个分区的“最后一个”条目就是该分区中编号为1的行
请参见您使用的是哪个
DBMS
using@Soumya这里发布的所有答案都是绝对正确的,您的问题以多种方式得到解决您可以选择任何一种…您是DBMS
using@Soumya这里所有的答案都是绝对正确的,你的问题以多种方式解决,你可以选择任何一种…您是哪个DBMS
using@Soumya这里发布的所有答案都是绝对正确的,您的问题以多种方式得到解决您可以选择任何一种…您是DBMS
using@Soumya这里所有的答案都是绝对正确的,你的问题以多种方式解决,你可以选择任何一种。。。