一段时间后对数据进行排序

时间:2019-05-03 14:55:04

标签: sql sql-server

接下来如何查询以更少的时间修改我的数据(在本示例中,反之亦然)。

这看起来像是当前结果

这是我的查询

SELECT *
FROM Z_PRAESENZZEIT
WHERE ZPZ_Datum = N'2019-02-11T00:00:00.000' and ZPZ_LPE_ID = 121
order by ZPZ_ID  ASC

我需要按小于(ZPZ_Von:1899-12-30 10:00:00 <1899-12-30 13:00:00

的ZPZ_ID和ZPZ_VON进行排序

3 个答案:

答案 0 :(得分:1)

有一些非常简单的方法可以优化数据查询,但是对您有用的方法似乎是使用ZPZ_LPE_ID作为标识符,在该列上有一个索引是有意义的(并确保重建索引)从而实际上提高了速度)。

ZPZ_Datum = N'2019-02-11T00:00:00.000'

也是可疑的。看起来像一个日期字段,但是您像字符串一样使用它,因此我将假定它实际上不是日期字段。字符串比较通常比日期和数字比较慢,因此您应该考虑将其设置为日期字段并将其与日期进行比较。

答案 1 :(得分:1)

我认为您不希望在更短的时间内(即更有效)进行排序,而是希望按小于给定值的时间进行排序。

SELECT *
FROM Z_PRAESENZZEIT
WHERE
    ZPZ_Datum = N'2019-02-11T00:00:00.000' and
    ZPZ_LPE_ID = 121
ORDER BY
    CASE WHEN ZPZ_Von < N'1899-12-30 13:00:00' THEN 0 ELSE 1 END,
    ZPZ_ID

这将首先列出ZPZ_Von少于1899-12-30 13:00:00的{​​{1}}的所有记录,然后列出ZPZ_ID的所有其他记录。此ZPZ_ID表达式创建两个组,按这些组对记录进行排序。


如果您只是想先按时间排序,然后再按ID排序(如果两个或多个记录具有相同的时间),则写

CASE

默认顺序始终为ORDER BY ZPZ_Von, ZPZ_ID ,即从小到大。如果要反转,请写ASC

答案 2 :(得分:0)

我将您的查询写为:

SELECT *
FROM Z_PRAESENZZEIT
WHERE ZPZ_Datum = '2019-02-11' and ZPZ_LPE_ID = 121
ORDER BY ZPZ_ID  ASC;

对于此查询,您需要Z_PRAESENZZEIT(ZPZ_LPE_ID, ZPZ_Datum, ZPZ_ID)上的索引。这应该同时满足WHERE并允许ORDER BY避免排序。