Подход использования __dirname
является наиболее надежным. Он всегда даст вам правильный каталог. Вам не нужно беспокоиться о ../../
в среде Windows, поскольку path.join()
позаботится об этом.
Однако есть альтернативное решение. Вы можете использовать process.cwd()
, который возвращает текущий рабочий каталог процесса. Эта команда отлично работает, если вы выполняете свое приложение-узел из каталога базового приложения. Однако, если вы выполняете свое приложение-узел из другого каталога, скажем, его родительского каталога (например, node yourapp\index.js)
, механизм __dirname
будет работать намного лучше.
Надеюсь, что это поможет.
Это не проверено из-за отсутствия пригодных для использования образцов данных (изображение не пригодно для использования, так как волонтеры могут использовать его только для моей расшифровки), однако LAG
должно помочь Вы достигаете этого:
WITH CTE AS
(SELECT VisitID,
EventActualDateTime,
Code,
LocationID,
LAG(LocationID) OVER (PARTITION BY VisitID ORDER BY EventActualDateTime) AS PreviousLocationID
FROM AdmVisitEvents
WHERE VisitID = '6012227281'
AND Code IN ('ENADMIN', 'TFRADMIN'))
SELECT ROW_NUMBER() OVER (PARTITION BY VisitID ORDER BY EventActualDateTime) AS RowNum,
VisitID,
EventActualDateTime,
Code,
LocationID
FROM CTE
WHERE LocationID != PreviousLocationID OR PreviousLocationID IS NULL;
Обратите внимание, что предложения PARTITION BY
на самом деле не нужны в этих запросах из-за ваших WHERE
(VisitID = '6012227281'
). Поскольку VisitID
может иметь только одно скалярное значение, PARTITION BY
никогда не будет генерировать значения для другого «набора».
Вы можете использовать row_number()
с предложением ties
:
SELECT TOP (1) WITH TIES VisitID, EventActualDateTime, Code, LocationID
FROM AdmVisitEvents
WHERE VisitID = '6012227281' AND
Code IN ('ENADMIN','TFRADMIN')
ORDER BY ROW_NUMBER() OVER (PARTITION BY VisitID, Code, LocationID ORDER BY EventActualDateTime);