Выберите 5 лучших из 2 баз данных очень медленно - PullRequest
0 голосов
/ 11 марта 2020

Мне нужно выбрать первые 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

Две базы данных и таблицы не связаны.

1 Ответ

0 голосов
/ 11 марта 2020

Мне кажется, я наконец понял, что вы после. Я не понимаю, почему вы этого хотите, но вот мое решение.

По сути, вам просто нужен простой запрос для каждой таблицы, упорядочив их в порядке убывания. Чтобы присоединиться к ним и вернуть их в одну таблицу, используйте функцию 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 чтобы увидеть это в действии.

...