Объединить два запроса в один без использования временных таблиц

Не удается выполнить проверку, но попробуйте

np.where(n > 0, n - t, n)

См. документацию

0
задан GMB 17 January 2019 в 00:12
поделиться

1 ответ

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

Рассмотрим:

SELECT  
    clientid, 
    MIN(calendar) as mincal 
    MIN(CASE WHEN calls = 0 AND calendar < getdate()-2 THEN calendar END) as callzero,
    DATEDIFF(
        DAY,
        MIN(CASE WHEN calls = 0 AND calendar < getdate()-2 THEN calendar END),
        MIN(calendar)
    ) as date_interval 
FROM (
    SELECT 
        clientid, 
        CONVERT(datetime, convert(varchar(10), calendar)) calendar
    FROM STATS
)
GROUP BY clientid

Примечания:

  • Я понимаю, что даты в CALENDAR хранятся как целые числа, отсюда и двойное преобразование. Чтобы ограничить количество конверсий, я переместил его в подзапрос.

  • В третьем столбце учитываются только строки, имеющие calls = 0 и calendar в течение последних двух дней; для других строк оператор CASE возвращает NULL, который в основном игнорируется агрегатной функцией MIN.

  • в sql-server, DATE_DIFF можно использовать для вычитания дат (здесь запрос возвращает количество дней между двумя вычисленными датами)

  • [1119 ]
0
ответ дан GMB 17 January 2019 в 00:12
поделиться
Другие вопросы по тегам:

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