1

チケット販売サイトでユーザーのリアルタイム ビューをまとめようとしています。

現在、サイトで 2 つのセッションを行っています (Session col)。私の現在のクエリは以下を返します:

EVENTID     EVENT      Session    SessionOpened           SessionLength   NumberofTix
1619        BB King     11         2013-01-28 09:34:16.300   -2            2
1622        BB King     12         2013-01-28 09:36:55.073    0            1
1622        BB King     12         2013-01-28 09:36:55.077    0            3

ただし、次のようになります。

EVENTID     EVENT      Session    SessionOpened           SessionLength   NumberofTix
1619        BB King     11         2013-01-28 09:34:16.300   -2            2
1622        BB King     12         2013-01-28 09:36:55.073    0            4

セッション 12 が 2 つの行を返すのはなぜですか? 1 つはチケット 1 つ、もう 1 つはチケット 3 つ

クエリ:

SELECT distinct set_eSRO_Event as EventID, shName as EventName, setSRO_UID as SRO_SessionID, setDateTime as SessionStarted, 
DATEDIFF(mi, getDate(), setDateTime) as SessionTimer, Count(*) AS NumberofTickets FROM SessionTickets
INNER JOIN Shows on shCode = setShowCode
WHERE setStatus = 0
GROUP BY setsro_UID, shName, set_eSRO_Event, setDateTime
4

2 に答える 2

1

結果の列とクエリのエイリアスは一貫していないため、言うのは難しいです。setDateTime が異なる (= SessionStarted または SessionOpened) と想像できます。setDatetime でグループ化すると、異なる場合 => 2 行になります。

そのため、setDatetime に集計関数を追加しMIN(「必要な」結果のように)、GROUP BY から setDatetime を削除します。

SELECT set_eSRO_Event as EventID, 
shName as EventName, 
setSRO_UID as SRO_SessionID, 
MIN(setDateTime) as SessionStarted, 
DATEDIFF(mi, getDate(), MIN(setDateTime)) as SessionTimer, 
COUNT(*) AS NumberofTickets 
FROM SessionTickets
INNER JOIN Shows on shCode = setShowCode
WHERE setStatus = 0
GROUP BY setsro_UID, shName, set_eSRO_Event
于 2013-01-28T14:59:49.040 に答える
1

どの列がどのテーブルに属しているか、および SQL Server のバージョンを実際に知らなくても、次のクエリを試すことができます。

SELECT  EventID, 
        EventName, 
        SRO_SessionID, 
        MIN(SessionStarted) SessionStarted, 
        SessionTimer,
        SUM(NumberofTickets) NumberofTickets
FROM (  SELECT  set_eSRO_Event as EventID, 
                shName as EventName, 
                setSRO_UID as SRO_SessionID, 
                setDateTime as SessionStarted, 
                DATEDIFF(mi, getDate(), setDateTime) as SessionTimer, 
                Count(*) AS NumberofTickets 
        FROM SessionTickets 
        INNER JOIN Shows 
            ON shCode = setShowCode
        WHERE setStatus = 0
        GROUP BY set_eSRO_Event, shName, setSRO_UID, setDateTime,
                 DATEDIFF(mi, getDate(), setDateTime)) A
GROUP BY EventID, EventName, SRO_SessionID, SessionTimer
于 2013-01-28T15:00:04.950 に答える