Полагаю, у вас есть столбец Created_date
для ваших продуктов.
Я бы использовал это с оператором по модулю или делению вместе с DAY(GETDATE())
, чтобы "построить" мой однодневный алгоритм кэширования.
Итак, мой ORDER BY
будет выглядеть примерно так:
SELECT
DAY(CREATED_DATE) / DAY(GETDATE()) [Sorting]
...
ORDER BY Sorting
Таким образом, сортировка будет меняться каждый день и давать одинаковые результаты при запросе ежедневно.
Обновление 1:
Если у вас есть один и тот же результат для перекрывающихся результатов (товары, добавленные в один и тот же день, но в разные месяцы), вы также можете расширить его, чтобы добавить больше изменчивости:
SELECT
DAY(CREATED_DATE) % DAY(GETDATE()) [DSorting]
, MONTH(CREATED_DATE) % MONTH(GETDATE()) [MSorting]
...
ORDER BY DSorting
, MSorting
Обновление 2:
Однако у вас все еще нет 100% -ного детерминированного подхода с моим предыдущим ответом, поэтому я бы предложил добавить некоторую уникальность в ORDER BY
, включив столбец PK (при условии, что он у вас есть), как показано ниже:
SELECT
DAY(CREATED_DATE) % DAY(GETDATE()) [DSorting]
, MONTH(CREATED_DATE) % MONTH(GETDATE()) [MSorting]
...
ORDER BY DSorting
, MSorting
, ProductID -- most common PK column name I have ever seen
Обновление 3:
После вашего комментария я думаю, что это будетдостаточно заменить CREATED_DATE
на Product_ID
, чтобы вы могли получить что-то вроде:
SELECT
Product_ID % DAY(GETDATE()) [DSorting]
, Product_ID % MONTH(GETDATE()) [MSorting]
...
ORDER BY DSorting
, MSorting
, Product_ID