我有一张表用于列表,我现在希望从这张表中的特定order_key获得最高日期。
SELECT to_char(max(to_date(list_description,'DD.MM.YYYY'))) list_Description, id
from VW_TA04_BAG_5B
where bac_order = '00010001'
group by id
这是我的结果
20-MAR-17 1
08-MAR-17 2
06-JUN-17 3
02-MAY-18 4
03-MAY-18 5
但我只希望这个作为我的输出
03-MAY-18 5
答案 0 :(得分:2)
问题不明确。显然你只想得到这条线
03-MAY-18 5
“因为这一年,03年5月18日是一年后”。我想这意味着您需要list_Description
列中具有最长日期的行。
您不需要GROUP BY
。一个简单的ORDER BY list_Description DESC
加上一行的限制就足够了(并且运行得更快):
SELECT to_char(list_Description), id
FROM (
SELECT to_date(list_description,'DD.MM.YYYY') list_Description, id
FROM VW_TA04_BAG_5B
WHERE bac_order = '00010001'
ORDER BY list_Description DESC
)
WHERE ROWNUM <= 1
答案 1 :(得分:1)
订购记录并仅采取第一个
SELECT to_char(max(to_date(list_description,'DD.MM.YYYY'))) list_Description, id
from VW_TA04_BAG_5B
where bac_order = '00010001'
group by id
order by id desc
limit 1
答案 2 :(得分:1)
在Oracle中你可以尝试这样的事情。
@Override
protected void onDestroy() {
super.onDestroy();
if (mSubscription != null && !mSubscription.isUnsubscribed())
mSubscription.unsubscribe();
}
答案 3 :(得分:1)
另一种变体,使用keep last
:
select max(to_date(list_description,'DD.MM.YYYY')) as list_description,
max(id) keep (dense_rank last order by to_date(list_description,'DD.MM.YYYY')) as id
from VW_TA04_BAG_5B
where bac_order = '00010001';
LIST_DESC ID
--------- ----------
03-MAY-18 5
这个(以及其他答案)假设您将日期存储为字符串,这是糟糕的设计。如果list_description
实际上是一个日期 - 这个名称似乎不太可能 - 那么你正在进行隐式转换,这可能会在不同的环境中中断,而你只需要这样做:
select max(list_description) as list_description,
max(id) keep (dense_rank last order by list_description) as id
from VW_TA04_BAG_5B
where bac_order = '00010001';
无论如何,如果BACS ID的两行具有完全相同的日期(或字符串!),您至少需要考虑要发生的事情。
答案 4 :(得分:0)
如果您使用的是Oracle 12C,那么只需订购结果并仅获取FETCH第一行
SELECT TO_CHAR(MAX(TO_DATE(list_description,'DD.MM.YYYY'))) list_Description, id
FROM VW_TA04_BAG_5B
WHERE bac_order = '00010001'
GROUP BY id
ORDER BY list_Description DESC
FETCH FIRST ROW ONLY;