0

1日に複数回訪問した顧客を検索するクエリがあります。このクエリを特定の1日間実行すると、機能します。私がやりたいのは、日付の範囲を照会できるようにすることです。たとえば、12/1/12〜1/31/13を検索して、毎日複数回の訪問をチェックし、顧客が複数回訪問した日付を表示したいとします。以下は、機能していない私のクエリです。

SELECT        Customers.sBarcode, COUNT(Customers.sBarcode) AS [Number of Scans], Tickets.dtCreated
FROM            Tickets INNER JOIN
                         Customers ON Tickets.lCustomerID = Customers.lCustomerID
WHERE        (Tickets.dtCreated BETWEEN CONVERT(DATETIME, '2012-12-11 00:00:00', 102) AND CONVERT(DATETIME, '2012-12-12 00:00:00', 102)) AND (Tickets.dblTotal <= 0)
GROUP BY Customers.sBarcode, Tickets.dtCreated
HAVING        (COUNT(*) > 1)
4

2 に答える 2

1

次のようなものを試してください。

SELECT  Customers.sBarcode ,
        CAST(FLOOR(CAST(Tickets.dtCreated AS FLOAT)) AS DATETIME) AS dtCreatedDate ,
        COUNT(Customers.sBarcode) AS [Number of Scans]
FROM    Tickets
        INNER JOIN Customers ON Tickets.lCustomerID = Customers.lCustomerID
WHERE   ( Tickets.dtCreated BETWEEN CONVERT(DATETIME, '2012-12-01 00:00:00', 102)
                            AND     CONVERT(DATETIME, '2013-01-31 23:59:59', 102) )
        AND ( Tickets.dblTotal <= 0 )
GROUP BY Customers.sBarcode ,
        CAST(FLOOR(CAST(Tickets.dtCreated AS FLOAT)) AS DATETIME)
HAVING  ( COUNT(*) > 1 )

dtCreatedフィールドに時間情報があるとすると、cast / floor / castはそれをドロップし、日付をグループ化して日付範囲を拡張できます。

于 2013-02-01T18:14:19.203 に答える
0

試す:

SELECT      Customers.sBarcode, 
            COUNT(Customers.sBarcode) AS [Number of Scans], 
            convert(char(10),Tickets.dtCreated,102)
FROM        Tickets 
INNER JOIN  Customers ON Tickets.lCustomerID = Customers.lCustomerID
WHERE       Tickets.dtCreated >=CONVERT(DATETIME, '2012-12-11 00:00:00', 102) AND 
            Tickets.dtCreated < CONVERT(DATETIME, '2012-12-18 00:00:00', 102) AND 
            Tickets.dblTotal <= 0
GROUP BY    Customers.sBarcode, convert(char(10),Tickets.dtCreated,102)
HAVING      COUNT(*) > 1
于 2013-02-01T18:22:24.577 に答える