Я получил SelfJoin запросSQL SelfJoin + Left Outer РЕГИСТРИРУЙТЕСЬ Календарь
;WITH t as
(
SELECT
ROW_NUMBER() OVER (ORDER BY dbo.DIM_PROJECT_TECH_OBJ.FUNCTIONAL_LOCATION,DATEADD(ms, DATEDIFF(ms, '00:00:00', CONVERT(VARCHAR,REPLACE(dbo.FACT_MEASUREMENT.Doc_Time,'24:00:00','23:59:59'),102)), CONVERT(DATETIME, dbo.DIM_TIME_USAGE.DATE)) ASC) AS Rowy,
dbo.FACT_MEASUREMENT.FACT_MEASUREMENT_KEY,
dbo.FACT_MEASUREMENT.Doc_Number,
dbo.FACT_MEASUREMENT.Created_By,
dbo.FACT_MEASUREMENT.Text,
dbo.FACT_MEASUREMENT.Doc_Time,
dbo.FACT_MEASUREMENT.Date_Loaded,
dbo.DIM_VC_MEASURE.VALUATION_CODE_AND_DESC,
dbo.DIM_TIME_USAGE.DATE,
dbo.DIM_PROJECT_TECH_OBJ.FUNCTIONAL_LOCATION,
dbo.DIM_VC_MEASURE.VALUATION_CODE,
CONVERT(VARCHAR,REPLACE(dbo.FACT_MEASUREMENT.Doc_Time,'24:00:00','23:59:59'),102) AS TIME,
DATEADD(ms, DATEDIFF(ms, '00:00:00', CONVERT(VARCHAR,REPLACE(dbo.FACT_MEASUREMENT.Doc_Time,'24:00:00','23:59:59'),102)), CONVERT(DATETIME, dbo.DIM_TIME_USAGE.DATE)) AS DATUM
FROM
dbo.DIM_PROJECT_TECH_OBJ INNER JOIN dbo.FACT_MEASUREMENT ON (dbo.FACT_MEASUREMENT.PROJECT_TECH_OBJ_KEY=dbo.DIM_PROJECT_TECH_OBJ.PROJECT_TECH_OBJ_KEY)
INNER JOIN dbo.DIM_TIME_USAGE ON (dbo.FACT_MEASUREMENT.TIME_KEY=dbo.DIM_TIME_USAGE.TIME_KEY)
INNER JOIN dbo.DIM_VC_MEASURE ON (dbo.DIM_VC_MEASURE.VALUATION_CODE_KEY=dbo.FACT_MEASUREMENT.VALUATION_CODE_KEY)
WHERE
dbo.FACT_MEASUREMENT.Measurement_Position = 'AVAILABILITY'
AND
dbo.DIM_PROJECT_TECH_OBJ.FUNCTIONAL_LOCATION IN ('XXX','YYY','ZZZ')
)
select t.*, tprev.DATUM AS PRE_DATUM, tprev.VALUATION_CODE AS PRE_CODE, DATEDIFF (minute,tprev.DATUM, t.DATUM) AS DELTA_MIN
from t join
t tprev
on tprev.rowy = t.rowy - 1 AND tprev.FUNCTIONAL_LOCATION = t.FUNCTIONAL_LOCATION ;
Это возвращает набор из поля
FUNTIONAL LOC DATUM CODE PRE_DATUM PRE_CODE (-> Other fields)
XXX 01/07/2015 A 06/06/2015 Y
XXX 05/07/2015 B 01/07/2015 A
XXX 10/07/2015 C 05/07/2015 B
YYY 03/07/2015 B 15/06/2015 K
YYY 09/07/2015 C 03/07/2015 B
YYY 15/07/2015 A 09/07/2015 C
Теперь я хотел бы создать внешнее соединение с календарем (изображение из 01/07 до 10/07) даты и получить что-то вроде:
FUNTIONAL LOC DATUM CODE PRE_DATUM PRE_CODE
XXX 01/07/2015 A 06/06/2015 Y
XXX 02/07/2015 06/06/2015 Y
XXX 03/07/2015 06/06/2015 Y
XXX 04/07/2015 06/06/2015 Y
XXX 05/07/2015 B 01/07/2015 A
XXX 06/07/2015 01/07/2015 A
XXX 07/07/2015 01/07/2015 A
XXX 08/07/2015 01/07/2015 A
XXX 09/07/2015 01/07/2015 A
XXX 10/07/2015 C 05/07/2015 B
YYY 01/07/2015 15/06/2015 K
YYY 02/07/2015 15/06/2015 K
YYY 03/07/2015 B 15/06/2015 K
YYY 09/07/2015 C 03/07/2015 B
YYY 10/07/2015 03/07/2015 B
в основном, когда код не найден на календарные данных u предыдущий.
Любое предложение/идея? Спасибо заранее.
S.
У вас есть, например, '02/07/2015' для FUNCTIONAL_LOCATION = 'XXX' в CTE? –
Пожалуйста, отметьте свой вопрос в базе данных, которую вы используете. Кроме того, ваш результирующий набор не соответствует вашему запросу.В результирующем наборе больше столбцов, чем создается запрос. –
Здравствуйте, я использую SQL как базу данных. Результат имеет больше столбцов, но я только что заметил те, которые имеют решающее значение для моего желаемого результата. Но я могу опубликовать весь полный запрос, если это необходимо и необходимо. Спасибо – SimonFreeman