سؤال

في سؤال سابق ، ساعدتني يا رفاق في الحصول على بيانات من صف مختلف. البيان الذي أستخدمه يعمل تمامًا على استوديو MS SQL Server Managment Studio. يمكنني تشغيل البيان دون أي أخطاء وأرجع البيانات التي أحتاجها. ومع ذلك ، أحتاج إلى تشغيل هذه البيانات على برنامج الواجهة الأمامية لدينا. عندما أحاول تشغيل بياني في هذا البرنامج ، فإنه معلق فقط. لدي شعور بأن جزء "مع" من هذا البيان يسبب مشاكل. هل هناك على أي حال لإعادة كتابة هذا البيان عن طريق وضع هذا الجدول المؤقت في مسمة فرعية؟

WITH Temp1 AS (SELECT
SkillTargetID = Agent_Logout.SkillTargetID,
LogoutDateTime = Agent_Logout.LogoutDateTime,
LogonDate = DateAdd(s,-1 * Agent_Logout.LoginDuration,Agent_Logout.LogoutDateTime),
ROW_NUMBER() OVER(PARTITION BY Agent_Logout.SkillTargetID ORDER BY Agent_Logout.LogoutDateTime ASC) RowVersion,
LoginDuration = Agent_Logout.LoginDuration
FROM Agent_Logout)

SELECT
AgentID = Base.SkillTargetID,
LogonDate = Base.LogonDate,
BaseLogout = Base.LogoutDateTime,
BaseDuration = Base.LoginDuration,
NextLogon = Temp1.LogonDate,
LogoutDuration = DateDiff(s,Base.LogoutDateTime,Temp1.LogonDate)
FROM Temp1 Base
LEFT JOIN Temp1 ON Base.SkillTargetID = Temp1.SkillTargetID
AND Base.RowVersion = Temp1.RowVersion-1
هل كانت مفيدة؟

المحلول 2

أدناه هو ما انتهى بي. هذا يعمل مع برنامج Cisco Front-end الذي نستخدمه.

DECLARE @dtStartDateTime DATETIME, @dtEndDateTime DATETIME, @agentid VARCHAR
SET @dtStartDateTime = :start_date SET @dtEndDateTime = :end_date
SELECT
    FullName = Temp1.FullName,
    AgentID = Temp1.SkillTargetID,
    LogonDate = Temp1.LogonDate,
    LogoutDate = Temp1.LogoutDateTime,
    LoginDuration = Temp1.LoginDuration,
    RowVersion# = Temp1.RowVersion,
    AgentID2 = Temp2.SkillTargetID,
    LogonDate2 = Temp2.LogonDate,
    LogoutDate2 = Temp2.LogoutDateTime,
    RowVersion#2 = Temp2.RowVersion,
    LogoutDuration = DateDiff(s,Temp1.LogoutDateTime,Temp2.LogonDate)

FROM

(SELECT
    FullName = Person.LastName + ', ' + Person.FirstName,
    SkillTargetID = Agent_Logout.SkillTargetID,
    LogoutDateTime = Agent_Logout.LogoutDateTime,
    LogonDate = DateAdd(s,-1 * Agent_Logout.LoginDuration,Agent_Logout.LogoutDateTime),
    ROW_NUMBER() OVER(PARTITION BY Agent_Logout.SkillTargetID ORDER BY Agent_Logout.LogoutDateTime ASC) as RowVersion,
    LoginDuration = Agent_Logout.LoginDuration
    FROM Agent_Logout, Agent, Person
    WHERE Agent_Logout.SkillTargetID = Agent.SkillTargetID and Agent.PersonID = Person.PersonID
) Temp1,

(SELECT
    SkillTargetID = Agent_Logout.SkillTargetID,
    LogoutDateTime = Agent_Logout.LogoutDateTime,
    LogonDate = DateAdd(s,-1 * Agent_Logout.LoginDuration,Agent_Logout.LogoutDateTime),
    ROW_NUMBER() OVER(PARTITION BY Agent_Logout.SkillTargetID ORDER BY Agent_Logout.LogoutDateTime ASC) as RowVersion
    FROM Agent_Logout
    WHERE Agent_Logout.SkillTargetID = Agent_Logout.SkillTargetID
) Temp2

WHERE Temp1.SkillTargetID = Temp2.SkillTargetID and Temp1.RowVersion = (Temp2.RowVersion - 1) AND
(Temp1.LogonDate >= :start_date 
And Temp1.LogonDate <= :end_date) AND
Temp1.SkillTargetID IN (:agentid)
ORDER BY Temp1.SkillTargetID, Temp1.RowVersion

نصائح أخرى

إذا كنت ترغب فقط في تحقيق ذلك يمكنك القيام به

;WITH Temp1 AS (
SELECT
SkillTargetID = Agent_Logout.SkillTargetID,
LogoutDateTime = Agent_Logout.LogoutDateTime,
LogonDate = DateAdd(s,-1 * Agent_Logout.LoginDuration,Agent_Logout.LogoutDateTime),
ROW_NUMBER() OVER(PARTITION BY Agent_Logout.SkillTargetID ORDER BY Agent_Logout.LogoutDateTime ASC) RowVersion,
LoginDuration = Agent_Logout.LoginDuration
FROM Agent_Logout)

SELECT * INTO #Temp1 FROM Temp1


SELECT
AgentID = Base.SkillTargetID,
LogonDate = Base.LogonDate,
BaseLogout = Base.LogoutDateTime,
BaseDuration = Base.LoginDuration,
NextLogon = #Temp1.LogonDate,
LogoutDuration = DateDiff(s,Base.LogoutDateTime,#Temp1.LogonDate)
FROM #Temp1 Base
LEFT JOIN #Temp1 ON Base.SkillTargetID = #Temp1.SkillTargetID
AND Base.RowVersion = #Temp1.RowVersion-1

لا يفهم حقًا ما تعنيه من خلال التعليق عند الجري في برنامج الواجهة الأمامية. هل تستخدم الاستعلام تمامًا كما هو مكتوب أم أنك تقوم بتصويره بطريقة ما؟

هل تقوم بتشغيله مقابل نفس البيانات في كل مرة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top