假设我有以下数据并且我想收集最新的日期信息,那么使用max函数或任何其他函数编写sql的最佳方法是什么?仅供参考 - 我只有对服务器的只读访问权限,无法创建临时表或其他任何内容。
感谢。
<table border="1">
<tr>
<th>NAME</th>
<th>ID</th>
<th>CODE</th>
<th>DATE</th>
</tr>
<tr>
<td>A </td>
<td>Z1 </td>
<td>780.52 </td>
<td>11/14/11</td>
</tr>
<tr>
<td>A </td>
<td>Z1 </td>
<td>780.54 </td>
<td>10/31/11</td>
</tr>
<tr>
<td>A </td>
<td>Z1 </td>
<td>780.54 </td>
<td>10/24/11 </td>
</tr>
<tr>
<td>AB </td>
<td>Z22 </td>
<td>327.23 </td>
<td>12/09/11</td>
</tr>
<tr>
<td>AB </td>
<td>Z22 </td>
<td>327.23 </td>
<td>11/02/11</td>
</tr>
<tr>
<td>AB </td>
<td>Z22 </td>
<td>327.23 </td>
<td>09/13/11</td>
</tr>
<tr>
<td>B </td>
<td>Z55 </td>
<td>327.23 </td>
<td>01/06/11</td>
</tr>
<tr>
<td>C </td>
<td>Z77 </td>
<td>327.23 </td>
<td>01/04/11</td>
</tr>
<tr>
<td>DD </td>
<td>Z888 </td>
<td>327.23 </td>
<td>10/31/11</td>
</tr>
<tr>
<td>DD </td>
<td>Z888 </td>
<td>327.23 </td>
<td>10/24/11</td>
</tr>
<tr>
<td>DD </td>
<td>Z888 </td>
<td>327.23 </td>
<td>10/06/11</td>
</tr>
<tr>
<td>DD </td>
<td>Z888 </td>
<td>327.23 </td>
<td>08/08/11</td>
</tr>
<tr>
<td>DD </td>
<td>Z888 </td>
<td>780.54 </td>
<td>07/28/11</td>
</tr>
<tr>
<td>DD </td>
<td>Z888 </td>
<td>327.23 </td>
<td>07/19/11</td>
</tr>
<tr>
<td>EE </td>
<td>Z2323 </td>
<td>327.23 </td>
<td>03/17/11</td>
</tr>
<tr>
<td>EE </td>
<td>Z2323 </td>
<td>327.23 </td>
<td>02/24/11</td>
</tr>
<tr>
<td>EE </td>
<td>Z2323 </td>
<td>780.54 </td>
<td>02/13/11</td>
</tr>
<tr>
<td>FF </td>
<td>Z99 </td>
<td>327.23 </td>
<td>07/07/11</td>
</tr>
<tr>
<td>FF </td>
<td>Z99 </td>
<td>780.54 </td>
<td>06/28/11</td>
</tr>
<tr>
<td>II </td>
<td>Z963 </td>
<td>327.23 </td>
<td>09/19/11</td>
</tr>
<tr>
<td>II </td>
<td>Z963 </td>
<td>327.23 </td>
<td>08/30/11</td>
</tr>
<tr>
<td>II </td>
<td>Z963 </td>
<td>327.23 </td>
<td>06/29/11</td>
</tr>
<tr>
<td>II </td>
<td>Z963 </td>
<td>780.54 </td>
<td>06/29/11</td>
</tr>
<tr>
<td>II </td>
<td>Z963 </td>
<td>780.54 </td>
<td>06/14/11</td>
</tr>
<tr>
<td>L </td>
<td>Z99999 </td>
<td>327.23 </td>
<td>09/16/11</td>
</tr>
<tr>
<td>NN </td>
<td>Z9870 </td>
<td>327.23 </td>
<td>11/23/11</td>
</tr>
<tr>
<td>NN </td>
<td>Z9870 </td>
<td>327.23 </td>
<td>10/06/11</td>
</tr>
<tr>
<td>NN </td>
<td>Z9870 </td>
<td>327.23 </td>
<td>06/07/11</td>
</tr>
<tr>
<td>NN </td>
<td>Z9870 </td>
<td>780.54 </td>
<td>01/18/11</td>
</tr>
<tr>
<td>NN </td>
<td>Z9870 </td>
<td>780.54 </td>
<td>01/11/11</td>
</tr>
</table>
答案 0 :(得分:1)
我认为您可以尝试其中任何有用的内容:
select * from (Select * from your_table order by date desc) where rownum=1;
select * FROM your_table WHERE date= (SELECT MAX(date) from your_table)
SELECT * FROM (select a.*, MAX(date) OVER() max_date_column FROM your_table a) WHERE your_date_column = max_date_column
SELECT * FROM( select a.*, ROW_NUMBER OVER(ORDER BY date DESC) rn FROM your_table a) WHERE rn = 1
答案 1 :(得分:1)
查询1 :
SELECT MIN( NAME ) KEEP ( DENSE_RANK LAST ORDER BY "DATE" ASC ) AS NAME,
MIN( ID ) KEEP ( DENSE_RANK LAST ORDER BY "DATE" ASC ) AS ID,
MIN( CODE ) KEEP ( DENSE_RANK LAST ORDER BY "DATE" ASC ) AS CODE,
MIN("DATE") KEEP ( DENSE_RANK LAST ORDER BY "DATE" ASC ) AS "DATE"
FROM tbl
<强> Results 强>:
| NAME | ID | CODE | DATE |
|------|------|--------|---------------------------------|
| AB | Z22 | 327.23 | December, 09 2011 00:00:00+0000 |
答案 2 :(得分:0)
SELECT tbl.Name, tbl.Id, tbl.Code, tbl.date
FROM tbl
JOIN (
SELECT Name, Id, Code, MAX(date) AS Max_Date
FROM tbl
GROUP BY Name, Id, Code) tbl_max
ON tbl.Name=tbl_max.Namne
AND tbl.Id=tbl_max.Id
And tbl.Code=tbl_Max.Code
AND tbl.Date=tbl_max.Max_Date