选择2个数据库中的前5个非常慢

问题描述 投票:-2回答:1

我必须在另外两个数据库中选择前5行,并对每个数据库列进行排序。

这是我的代码。

SELECT TOP 5 DK.dbo.TIME.TIME_STRT, DB1.dbo.DATA.PLC_11
FROM DK.dbo.TIME, DB1.dbo.DATA
ORDER BY TIME_STRT DESC, PLC_11 desc;

它已经运行了10分钟。

+ edit

我想我做了一个奇怪的解释

DB1.dbo.DATA
PLC_TIME                 PLC_11
2019-11-24 23:25:48.443  110
2019-11-24 23:25:49.460  191
2019-11-24 23:25:57.037  599
2019-11-24 23:26:49.473  110
2019-11-24 23:26:50.490  195
2019-11-24 23:28:06.547  600
2019-11-24 23:28:36.720  109
2019-11-24 23:28:37.733  201
2019-11-24 23:29:06.553  600
2019-11-24 23:24:47.413  110
2019-11-24 23:24:48.437  186
2019-11-24 23:24:57.027  599
2019-11-24 23:29:37.747  109
2019-11-24 23:29:38.760  204
2019-11-24 23:30:06.570  600
2019-11-24 23:30:38.777  109
2019-11-24 23:30:39.793  210
2019-11-24 23:31:06.560  600
2019-11-24 23:31:39.817  109
2019-11-24 23:31:40.850  213

DK.dbo.TIME
TIME_STRT                TIME_CODE
2020-03-11 08:20:48.000  11619
2020-03-11 09:45:36.000  11608
2020-03-11 07:27:21.587  11616
2020-03-11 13:38:08.000  11672
2020-03-11 07:36:18.000  11627
2020-03-11 08:19:15.000  11629
2020-03-11 07:05:41.000  11626
2020-03-11 10:15:45.000  11609
2020-03-11 06:48:45.000  11624
2020-03-11 13:31:12.000  11669
2020-03-11 16:30:43.000  11685
2020-03-11 13:18:38.000  11671
2020-03-11 14:30:05.000  11684
2020-03-11 13:20:50.000  11645
2020-03-11 14:07:31.000  11683
2020-03-11 13:07:21.090  11673
2020-03-11 15:20:20.000  11663
2020-03-11 14:30:43.000  11662
2020-03-11 14:10:01.000  11661
2020-03-11 13:00:23.000  11647

我想要这个结果。

2020-03-11 16:30:43.000  600
2020-03-11 15:20:20.000  600
2020-03-11 14:30:43.000  600
2020-03-11 14:30:05.000  600
2020-03-11 14:10:01.000  599

这两个数据库和表不相关。

sql-server sql-server-2005 mssql-jdbc
1个回答
0
投票
基本上,您只需要对每个表进行简单查询,就可以按降序对其进行排序。要连接它们并将它们返回到同一表中,请使用ROW_NUMBER()函数,然后在该行号上进行连接。使用ROW_NUMBER()函数,可以将ORDER BY移到OVER子句中。

SELECT t.TIME_STRT, p.PLC_11 FROM ( SELECT TOP (5) TIME_STRT , TIME_CODE , ROW_NUMBER() OVER(ORDER BY TIME_CODE DESC) AS ROW_NUMBER FROM TIME ) t INNER JOIN ( SELECT TOP (5) PLC_TIME , PLC_11 , ROW_NUMBER() OVER(ORDER BY PLC_11 DESC) AS ROW_NUMBER FROM DATA ) p ON t.ROW_NUMBER = p.ROW_NUMBER

哪个会产生您想要的结果。

TIME_STRT                PLC_11
2020-03-11 16:30:43.000  600
2020-03-11 15:20:20.000  600
2020-03-11 14:30:43.000  600
2020-03-11 14:30:05.000  600
2020-03-11 14:10:01.000  599

这里是dbfiddle,正在运行中。

© www.soinside.com 2019 - 2024. All rights reserved.