您好我有下表
cod desc date
131 test1
132 test2
133 test3
134 test4
133 test3 20180301
133 test3 20180308
131 test1 20180227
134 test4 20180305
134 test4 20180225
132 test2 20180130
我应该选择日期desc排序的空日期行 换句话说,结果应该是这样的:
cod desc date
133 test3
134 test4
131 test1
132 test2
我执行的查询是
with test as (
select t1.cod, t1.desc, t1.date
from mytable t1
)
select cod, desc, date
from test where date =''
order by test.date desc
但结果不是我想要的
cod desc date
131 test1
132 test2
133 test3
134 test4
对我而言似乎没有正确使用(order by)。
真正的问题是 当医生第一次写这个药物时,他没有注册日期,当护士把它交给患者然后它就是注册日期所以,我的问题是显示最近的药物,在我的情况下是项目由最近日期排序的空日期
我将欣赏任何我犯错误的准则
答案 0 :(得分:2)
不要排除空日期,而是使用聚合来查找最大日期:
select cod, desc, max(date)
from test
group by cod, desc
order by max(date) desc
如果您不想显示日期,大多数DBMS支持按不在“选择”列表中的列进行排序:
select cod, desc
from test
group by cod, desc
order by max(date) desc
根据DBMS对NULL的排序方式,您可能需要添加选项lke
order by max(date) desc NULLS LAST
查看您的modified fiddle
答案 1 :(得分:0)
这引出了一个问题,即cod
多次出现时您要使用的日期。这是一种方法:
select t.*
from test t
where t.date = '' -- don't store dates as strings
order by (select max(t2.date) from test t2 where t2.cod = t.cod);
答案 2 :(得分:0)
您正尝试在空白字段上应用order by子句!!这就是你追求的吗? sqlfiddle
with test as (
select t1.cod, t1.desc, t1.date
from mytable t1
)
select t.cod, t.desc, t.date
from test as t
inner join (
select cod
from test where date =''
group by cod
) sel
on t.cod = sel.cod
where t.date <> ''
order by t.date desc