查询
SELECT B.TYPE,
B.TYPE_VAL,
B.COMP,
B.start,
B.end,
B.lt,
B.modify
FROM table B
WHERE B.start <= sysdate
AND B.end >= sysdate
AND TRIM(B.type_val) IN
('111-AAA')
ORDER BY B.type_val,
B.type,
B.comp DESC;
输出
+------+----------+------+-----------+------------+----+-----------------+
| TYPE | TYPE_VAL | COMP | START | END | LT | MODIFY |
+------+----------+------+-----------+------------+----+-----------------+
| AS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| AS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 68 | 3/8/2016 0:34 |
| BS | 111-AAA | ** | 6/16/2015 | 6/16/2015 | 7 | 6/16/2015 10:32 |
| CS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| CS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| HS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| HS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| MS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| MS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| OS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| OS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| PS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| PS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| S | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| S | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| VS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| VS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
+------+----------+------+-----------+------------+----+-----------------+
如果您发现正在提取的数据采用latest one first then older one
。
例如TYPE AS
-
| AS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
| AS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 68 | 3/8/2016 0:34 |
最新数据,即2016年5月10日首先是2016年3月8日。(MM / DD / YY格式)
但是这里有一个例外,TYPE PS
- 3/8/2016 is above 5/10/2016
与其他所有例外情况不同。
| PS | 111-AAA | ** | 3/8/2016 | 12/31/9999 | 13 | 3/8/2016 0:34 |
| PS | 111-AAA | ** | 5/10/2016 | 12/31/9999 | 1 | 5/10/2016 11:12 |
根据我的知识,如果排序顺序相同(TYPE,TYPE_VAL和COMP相同,所以没有排序),理想情况下最新的那个应该在顶部。
我的问题是 - 为什么这个特定记录的顺序是相反的?难道不应该像所有其他百万条记录被拉出来一样吗?必须有一些特殊原因,为什么会发生这种情况。
我知道你们中的大多数人都会提到Oracle没有特别的方式来返回行,但这不是这种情况。
答案 0 :(得分:2)
如果未指定显式ORDER BY
,则数据库基本上可以按其认为合适的任何顺序返回行。这个可以是插入顺序,但不一定是。
如果您想对start
列进行排序,请将其添加到ORDER BY
:
ORDER BY B.type_val,
B.type,
B.comp DESC,
B.start;
答案 1 :(得分:2)
您的order by
条款是:
ORDER BY B.type_val, B.type, B.comp DESC;
您的记录对对这三列具有完全相同的值。因此,它们可以按任何顺序出现。如果有些人在&#34;右边&#34;这是巧合。 order,因为查询没有提供正确排序的信息。
如果您希望按特定顺序使用它们,则需要在ORDER BY
中包含该信息。例如:
ORDER BY B.type_val, B.type, B.comp DESC, B.Modify DESC
答案 2 :(得分:1)
确切地说,如果没有在列(MODIFY
专门)上指定任何顺序,则结果集的行可以按该列的任何顺序返回,或者根本不返回任何顺序。 Oracle,MS Sql,任何其他数据库都将以相同的方式运行。为什么某些特定行在MODIFY
上有这个特殊排序,而其他行有不同的排序?我不相信我们可以知道它,涉及太多因素。
答案 3 :(得分:0)
如果您未在订单查询中包含列,则数据库可以订购或不订购其他列,但您不能假定订购。
注意你使用的SQL提供程序(MySQL,Orache ......),每个人都可以工作不同。