如何在SQL中执行orderby?

如何在SQL中执行orderby?,sql,db2,Sql,Db2,嗨,我有下表 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

嗨,我有下表

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
我应该选择日期描述排序的日期为空的行 换句话说,结果应该是这样的:

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

真正的问题是 当医生第一次写的时候,他没有记录日期,当护士给病人的时候,他就记录了日期。所以,我的问题是显示最近的药物,在我的情况下,是按最近日期订购的空日期的药物


如果我犯了错误,我将非常感谢任何指导原则。这就引出了一个问题,即当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);

您试图在空字段上应用order by子句!!。这就是你想要的吗


不要排除空日期,而是使用聚合查找最长日期:

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对空值排序的方式,您可能需要添加一个选项lke

order by max(date) desc NULLS LAST

查看您的

是否将日期存储为字符串?是的,正如您在以下链接中所看到的,您希望如何排序?那个CTE只是桌子。CTE是如何增加价值的?您说它应该按“date desc”排序,但没有显示/包括它是什么,查询是关于什么时候date是空的,那么您到底想按什么排序?4个空空格,并期望从空白值中获得特定顺序?您应该添加一个新的标准,以便在date=问题在于,当医生第一次写它时,他没有注册日期,而当护士给患者时,则注册日期,我的问题是显示最近的药物,在我的情况下,按最近的日期订购的日期为空的项目尝试这个````测试为选择t1.cod,t1.desc,t1.date从我的表格t1选择t.cod,t.desc,t.date从测试中选择t.cod,t.inner join选择cod-从护士选择cod中选择最新日期的cod,row_number overcoder by date desc as rnk from test where date ranged where rnk=1 sel on t.cod=sel.cod-从没有日期的医生处选择记录where t.date=``步骤1:内部查询选择所有具有有效日期的记录,并根据日期的描述顺序对其进行排序。这是子查询。步骤2:获取排名为1的cod。这将是最新日期的记录。这是子查询sel。步骤3:使用子查询sel中的cod获取要从外部查询中选择的记录,其中where子句date=即没有日期的记录。问题是:这应该是一个医生插入处方药的药物表,我第一次没有注册日期,之后,护士给患者服药,在这种情况下,我插入相同的项目,但注明日期,此外,当护士给病人开同一张处方时,我想先点医生第一次开的处方,但日期为空,然后使用医生最近开的处方日期nurse@M.A.Hassan:在DBMS中,没有第一次使用空日期,除非您保留一个时间戳,表明这一点,也就是说,行的顺序不一定代表插入的顺序。目前无法获取按插入顺序返回并显示最近日期的数据。@M.A.Hassan:Btw,您是否尝试过我的查询?它符合你想要的结果。如果您不想退回开过处方但从未给过的药物,您可以添加HAVING maxdate>@dneoth非常感谢您的努力,我尝试了您的查询,但仍然不符合我的期望结果,因为,我只想得到那些空日期的记录,这些记录只按照问题描述中所示的其他记录的日期排序。@M.A.Hassan:嗯,fiddle结果正是您在描述中所期望的顺序。
order by max(date) desc NULLS LAST