SQL从多个表中选择数据,按每个类别中的列排序

时间:2017-05-17 05:13:41

标签: sql

我有两张桌子:

table1                                      table2
----------------------------               --------------------------------
sym        i_date    value                 id (PK)    sym         mapping
----------------------------               --------------------------------
abc       2017-2-23    3.4                      1         abc         MP1
xyz       2013-1-12    4.5                      2         xyz         MP3  
def       2011-1-1     1.1                      3         def         MP1
abc       2012-1-23    3.2

对于给定的映射' value我想检索与映射匹配的所有sym,然后检索所有i_date和值,并为每个sym按升序排序所有i_dates。

例如,如果我指定' MP1'我想像这样检索它:

Expected Result
----------------------------              
sym        i_date    value                
----------------------------              
abc       2012-1-23    3.2         
abc       2017-2-23    3.4                                             
def       2011-1-1     1.1

我能够在没有使用以下sql语句对每个sym进行排序的情况下获取数据:

select table1.sym,
    table1.i_date,
    table1.value
from table1
inner join table2 on table1.sym = table2.sym
where table2.mapping = 'MP1'

请告知我如何获得预期结果(如下所示)。提前谢谢。

4 个答案:

答案 0 :(得分:1)

select table1.sym,
table1.i_date,
table1.value
from table1
inner join table2 on table1.sym = table2.sym
 where table2.mapping = 'MP1'
 order by table1.sym,
table1.i_date

答案 1 :(得分:1)

除非我在这里遗漏了一些内容,否则一个简单的order by应该这样做:

select table1.sym,
    table1.i_date,
    table1.value
from table1
inner join table2 on table1.sym = table2.sym
where table2.mapping = 'MP1'
order by table1.sym, table1.i_date

答案 2 :(得分:0)

如果我理解正确你只需要像订购条款一样简单的东西吗?

选择table1.sym,     table1.i_date,     table1.value 来自table1 table1.sym = table2.sym上的内连接table2 table2.mapping =' MP1' e 按table2.mapping,table1.value

排序

您需要使用order by子句。 Ir首先按指定的第一个元素排序,然后按第二个

排序

答案 3 :(得分:0)

您可以尝试以下查询。

select table1.sym,
    table1.i_date,
    table1.value
from table1
inner join table2 on table1.sym = table2.sym
where table2.mapping = 'MP1' order by table1.i_date ,table1.sym