选择两个不同的列,其中包含一个最长日期

时间:2016-12-02 18:03:36

标签: mysql sql oracle sybase

我有一张这样的表:

ID  DATE        TableName  
X   29-Jan-12   A  
X   29-Feb-12   B  
X   29-Jan-12   C  
Y   18-Nov-12   A  
Z   18-Nov-14   C  
X   17-Nov-13   D  
Z   14-May-12   A  
Y   18-Nov-13   D  

我想用MaxDate获取唯一ID,以便输出应该像这样 -

ID  DATE    TableName  
Z   18-Nov-14   C  
Y   18-Nov-13   D  
X   17-Nov-13   D 

我正在使用select ID, MAX(DATE), TableName from table,但这并没有给我所需的输出。

2 个答案:

答案 0 :(得分:1)

您可以在子选择组中使用in子句 如果您使用的是允许元组的数据库

select id, date, tableName 
from my_table a 
inner join ( select id, max(date) max_date 
                     from my_table 
                     group by id) t on t.id = a.id and  t.max_date = a.date;

或者如果db不允许使用元组,则可以使用内连接

import tkinter as tk

root = tk.Tk()

myvar = tk.StringVar()
myvar.set("A test")

def on_click(event):

    event.widget.delete(0, tk.END)

entry = tk.Entry(root, textvariable=myvar)
entry.bind("<Button-1>", on_click)
entry.pack()
root.mainloop()

答案 1 :(得分:1)

Oracle 回答:

您缺少的是获取与每个组中tablename对应的max(date)

使用keep (dense_rank last...)这样做最有效:(注意 - DATE是Oracle中的保留字,所以我希望你的列名不是DATE而你只是用作占位符...)

select   id, max(date) as date, 
         max(tablename) keep (dense_rank last order by date) as tablename
from     table_like_this
group by id;

Oracle文档(对于FIRST但是阅读文本,它也指LAST) https://docs.oracle.com/cloud/latest/db112/SQLRF/functions065.htm#SQLRF00641