Я пытаюсь создать запрос, который приведет к последнему СОСТОЯНИЮ JOB_ID, это было бы просто в SQL Server 2008 с использованием функции rank over partition, но на SQL Server 2000 эта функция не является доступный. Мне удалось установить историю заданий в порядке возрастания Job_ID, а DATETIME - в временной таблице (#JOB_HISTORY -но помните, что pk_ID создается во временной таблице, используя: IDENTITY(int, 1,1)
), но вот та часть, в которой я получил застрял, я не знаю, как ранжировать записи в этой таблице.запрос ранга в sql server 2000
SELECT
h1.pk_ID,
h1.Job_ID,
h1.Status,
h1.DATETIME
FROM #JOB_HISTORY h1
ORDER BY h1.pk_ID ASC;
#JOB_HISTORY РЕЗУЛЬТАТ:
pk_ID, Job_ID, STATUS, DATETIME
1 1234 Succeded. 2015-03-30 12:10
2 1234 Failed. 2015-03-30 01:00
3 1234 Failed. 2015-03-28 01:00
4 5678 Failed. 2015-04-02 04:00
5 5678 Succeded. 2015-04-01 04:00
6 5678 Succeded. 2015-03-31 04:00
DESIRED ВЫВОД:
Job_ID STATUS DATETIME
1234 Succeded. 2015-03-30 12:10
5678 Failed. 2015-04-02 04:00
Вы можете сделать это с автообъединением, но это действительно некрасиво и крайне неэффективно (стоимость/срок идет вверх по экспоненте в виде таблицы становится больше). Как долго вы будете работать с искаженной, неподдерживаемой версией, например, 2000? –
У нас нет бюджета для обновления. Передняя программа, использующая SQL Server, не поддерживает более новую технологию SQL Server. :) Я попробовал этот запрос, но он работает доцент, как бы вы это сделали? 'ВЫБРАТЬ h1.pk_ID, h1.Job_ID, h1.STATUS, h1.DATETIME \t ИЗ #job_hyst h1, h2 # job_hyst где h2.DATETIME