SQL - упорядочение по числу, которое повторяется, когда оно достигает 999 - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь упорядочить по номеру, который повторяется, когда он достигает 999. Диапазон номеров от 1 до 999, и он всегда должен работать в порядке возрастания. В настоящее время мой SQL (ORDER BY BoxID ASC, Seqno ASC) генерирует следующий результат:

example of sequence range incorrectly ordered

Номер ящика будет всегда увеличиваться на 1 каждые 9 порядковых номеров. поэтому в примере, показанном в окне 35897, диапазон должен составлять 999, 1, 2, 3, 4, 5, 6, 7, 8

Нет меток времени, которые можно использовать для поиска порядка, поскольку последовательные числа вставляются в базу данных в случайном порядке.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Это немного удар в темноте, но, возможно, ...

SELECT Box,
       Number
FROM YourTable
ORDER BY Box,
         ROW_NUMBER() OVER (PARTITION BY Number ORDER BY Box ASC),
         Number;

Это, однако, не будет работать, если в одном поле содержится более 999 значений для Number.

DB <> Fiddle , показывающий решение (поскольку DB Fiddle ограничивает набор результатов 10 строками, мне пришлось использовать CTE для отображения соответствующих строк).

0 голосов
/ 02 июля 2019

Проблема возникает только в том случае, если в порядковых номерах ящика есть и 1, и 999. В таблице никогда не бывает более девяти строк в поле. Итак, определите случай и добавьте 1000 к младшим числам.

select *
from mytable
order by
  box, 
  case when min(number) over (partition by box) = 1
        and max(number) over (partition by box) = 999
        and number < 500
       then number + 1000
       else number
  end;

Демо: https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=f775b15e01ff6b88a86028dd59e3eb86

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...