Как сравнить даты каждой строки с датами всех других строк? - PullRequest
0 голосов
/ 28 февраля 2020

Мне нужно сравнить столбцы CreatedDate и TransactionDate моей таблицы со всеми другими столбцами даты. Я хочу получить общее количество для каждой строки числа строк с датами, полностью выходящими за пределы CreatedDate и TransactionDate, внутри них, частично перекрывающимися и т. Д. c. Это должно быть сделано для обоих, если CreatedDate после TransactionDate или перед ним.

Я думал, что функция будет работать:

CREATE FUNCTION GetCountOfTransactions 
     (@TransactionID int, 
      @CreateDate datetime, 
      @TrxDate datetime)
RETURNS TABLE 
AS
    RETURN 
        (SELECT 
             st.transactionid,
             CASE WHEN (@TrxDate > u/CreateDate) THEN 1 ELSE 0 END AS TAfterC,
             SUM(CASE WHEN
                        ((RCDate < u/CreateDate) AND (TrxDate < u/TrxDate) AND 
                         (RCDate < u/TrxDate) AND (TrxDate < u/CreateDate))
                        THEN 1 ELSE 0 END) AS CT_ClowerCTlowerC
         FROM
             (SELECT 
                  DATEADD(Day, DATEDIFF(Day, 0, TC.CreatedDate), 0) AS RCDate,         
                  TC.Posted, TC.CreatedDate AS Created, BadT.*
              FROM
                  Debug_BadTransaction BadT 
              LEFT JOIN 
                  TrxControl TC ON BadT.TransactionMasterID = tc.TransMasterID) AS ST

    WHERE 
        ST.transactionid <> u/TransactionID
    GROUP BY 
        st.transactionid
) 

Однако, когда я получаю поместить его в окружающий скрипт:

Поместить его в оператор выбора не получится, потому что он возвращает таблицу, а не скалярное значение:

SELECT 
    GetCountOfTransactionsGetCountOfTransactions(transactionid, TrxControl.Created, TrxControl.Posted),
    BadT.*
FROM 
    Debug_BadTransaction BadT
LEFT JOIN
    TrxControl TC ON BadT.TransactionMasterID = tc.TransMasterID

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

Может быть, это недостаток опыта, но Lag или Lead не будут работать, потому что это несколько значений вместо одного единственного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...