Я мигрирующие следующий за ней запрос SQL SERVERМожно ли преобразовать SQL Server запрос CTE в Postgres?
;WITH CTE AS
(
SELECT
ID, StartAptDate, EndAptDate,
RowNumber = ROW_NUMBER() OVER(ORDER BY StartAptDate ASC)
FROM
Appointments
WHERE
StylistId = 1
AND StartAptDate > CAST(CONVERT(CHAR(8), GetDate(), 112) AS DATETIME)
)
SELECT
FirstApptAvail = min(a.EndAptDate)
FROM
CTE a
INNER JOIN
CTE b ON a.RowNumber = b.RowNumber - 1
WHERE
datediff(minute, a.EndAptDate, b.StartAptDate) >= 15
AND (CAST(CONVERT(CHAR(8), a.StartAptDate, 108) AS DATETIME) BETWEEN '1900-01-01 07:57:57' AND '1900-01-01 18:59:59'
AND CAST(CONVERT(CHAR(8), a.EndAptDate, 108) AS DATETIME) BETWEEN '1900-01-01 07:57:57' AND '1900-01-01 18:59:59')
AND ((DATEPART(dw, a.StartAptDate) + @@DATEFIRST) % 7) NOT IN (0, 1)
После того как я мигрировал базу данных в Postgres Я изменил имена начало/конец столбца выше просто «старт» и «конец». Оказывается, postgres не нравится имя «end», поэтому я пытался его избежать, но поскольку я также использую функцию DATE_PART, мне нужно соблюдать одиночные кавычки. Вот то, что я до сих пор, но я хотел бы некоторую помощь округляя окончательное преобразование (предполагается, что это может быть перенесен на Postgres)
WITH RECURSIVE CTE AS (SELECT id, start, "end", RowNumber =
ROW_NUMBER() OVER(order by start asc)
FROM api_appointment
WHERE employee_id = 1 AND start > now())
SELECT FirstApptAvail = min(a."end")
FROM CTE a
INNER JOIN CTE b ON a.RowNumber = b.RowNumber - 1
WHERE DATE_PART('minute', a.start - b.start) >= 0
AND a.start >= '1900-01-01 07:57:57'
AND a.start <= '1900-01-01 18:59:59'
AND a."end" >= '1900-01-01 07:57:57'
AND a."end" <= '1900-01-01 18:59:59');
@ErwinBrandstetter Пропущенный этот псевдоним, спасибо. –
Также приведены те же данные, что и типы диапазонов.Они не кажутся такими же полезными, как я думал для этого, или я недостаточно умен, чтобы понять, как использовать их для этого. http://sqlfiddle.com/#!15/712cb –
wow -totally ударил по полноте вашего ответа! спасибо, что нашли время, чтобы помочь! один вопрос - ваш второй фрагмент с использованием «свинца» - это предлагаемое решение (существенно улучшающееся по оригиналу)? –