Сумасшедший вопрос о SQL: Как сделать, своего рода крест применяется с центром?

Я знаю, что вопрос не задавался, но я только написал и протестировал метод, который также возвращает частное. Я не нашел этого, когда искал его, поэтому я подумал, что выложу его туда.

/// <summary>
/// Compute integer quotient and remainder of <paramref name="dividend"/> / <paramref name="divisor"/>
/// where the <paramref name="remainder"/> has the same sign as <paramref name="divisor"/>, and is
/// between zero (inclusive) and the <paramref name="divisor"/> (exclusive). As always,
/// (quotientResult * <paramref name="divisor"/> + <paramref name="remainder"/> == <paramref name="dividend"/>).
/// </summary>
public static int DivRemPeriodic(int dividend, int divisor, out int remainder) {
    var quotient = Math.DivRem(dividend, divisor, out remainder);
    if (divisor > 0 ? remainder < 0 : remainder > 0) {
        remainder += divisor;
        quotient -= 1;
    }
    return quotient;
}
8
задан Zachary Scott 6 November 2009 в 23:57
поделиться

2 ответа

У меня есть для вас дешевый ответ. Вы используете «предварительно обработанную» таблицу недель для создания цикла на основе запроса. Вам нужно будет потратить на это достаточно недель, чтобы охватить ожидаемый диапазон сценариев.

[Week]
1
2
3
4

Затем вы присоединяете свой запрос на [Weeks Running] к этой таблице, используя неравенство OriginalTable.WeeksRunning < = Weeks.Week . В итоге вы получаете одну строку в неделю.

Вы получаете дату, добавляя Weeks.Week * 7 дней к дате, указанной в вашем номере события.

2
ответ дан 5 December 2019 в 23:15
поделиться

Это то, что, вероятно, было бы проще сделать на стороне приложения, чем на стороне базы данных, но я попробую ... Для этого нужна база данных, поддерживающая CTE, что я случайно нет под рукой, так что это не проверено.

WITH RECURSIVE expandedTable(eventNumber, classification, index, count, someData)
AS (
    SELECT eventNumber, classification, 1, weeksRunning, someData
    FROM originalTable
    WHERE weeksRunning > 0
  UNION ALL
    SELECT eventNumber + 7, classification, index + 1, count, someData
    FROM expandedTable
    WHERE index < count
)
SELECT eventNumber, classification, someData
FROM expandedTable;
3
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: