2015-10-15 47 views
-2

我试图创建一个SQL查询,但有一些真正的困难,并且不确定写入它的最佳方式。我目前有2列,一列包含时间戳,另一列包含随机信息。我希望时间戳按降序排列(很简单),但对于辅助列,我想按以下顺序输出结果:SQL查询以按日期降序和多个“like”子句得到结果

注意:这些%是故意的,因为它们在REMAINING列中。

  1. '%[EVENT = agentStateEvent]%' - 第一
  2. %[EVENT = TerminalConnectionCreated]%” - 第二
  3. 还有什么过第三,第四等为时间戳。

例如:

两个柱子均是字符串(VARCHAR最大)

 

    TIMESTAMP  | REMAINING 
    TIMESTAMP 10:30 | %[EVENT=agentStateEvent][Agentid=424][Queue=45235]% 
    TIMESTAMP 10:30 | %[EVENT=TerminalConnectionCreated][Agentid=424][Queue=45235]% 
    TIMESTAMP:10.31 | %[EVENT=agentStateEvent][Agentid=425][Queue=453635]% 
    TIMESTAMP 10.31 | %[EVENT=TerminalConnectionCreated][Agentid=425][Queue=45235]% 
    TIMESTAMP 10.31 | %[EVENT=CallDropped][Agentid=425][Queue=45235]% 
    TIMESTAMP 10.32 | %[EVENT=TerminalConnectionCreated][Agentid=426][Queue=44235]% 
    TIMESTAMP 10.32 | %[EVENT=CallDropped][Agentid=426][Queue=45235]% 

这将需要被包在一个“喜欢”命令作为列REMAINING包含很多更多的信息。

查询我至今是:

select * from TimestampsStorage 
order by timestamp desc, remaining desc 
+0

请发布'timestamp'和'remaining'列的完整内容示例。目前还不清楚它们的格式是什么,尽管我想我明白你正在使用'%...%'来暗示这些是在“剩余”中的子字符串。 –

+0

嗨,两列都是字符串(varchar max)。 %.....%不是子字符串,它们实际上是字符串的一部分,即REMAINING列中的实际条目是%[hithere]%。如果我想要搜索,那么select * from timestampsStorage where remaining ='%[hithere]%'如果这样做有道理的话? –

+1

但是你说“_它需要用'like'命令包装,因为REMAINING列包含更多信息。”其他信息是什么?请修改以上内容至少发布一个完整示例。 –

回答

1

使用您正在寻找CASE ... WHEN

order by 
    timestamp, 
    case when remaining like '%[EVENT=agentStateEvent]%' then 1 
     when remaining like '%[EVENT=TerminalConnectionCreated]%' then 2 
     else 3 
    end; 

如果'%[EVENT=...'来总是先在remaining,你可以看看 '%' explicitley。这可能会加快查询速度。

order by 
    timestamp, 
    case when remaining like '#%[EVENT=agentStateEvent]%' escape '#' then 1 
     when remaining like '#%[EVENT=TerminalConnectionCreated]%' escape '#' then 2 
     else 3 
    end; 
+0

这是完美的。非常感谢 :) –

0

可以在ORDER使用CASE表达式BY子句

select ... 
ORDER BY 
     [TIMESTAMP] 
    , CASE WHEN [REMAINING] = '%[EVENT=agentStateEvent]%' then 1 
      WHEN [REMAINING] = '%[EVENT=TerminalConnectionCreated]%' THEN 2 
      ELSE 3 
     END 
    , [REMAINING] 

NB:因为我不知道你正在使用的数据库管理系统;在[]在T-SQL