0

Facebook アプリケーションのユーザー アクションをログに記録するためのテーブルがあります。特定のアクション ID について、9 分以上経過していない最新の行を取得したいと考えています。この表には、他の統計情報の列が多数あるため、問題を表す 2 つの行のみを示します。

timestamp                  facebookID   producerID      eventID   actionID   numOfTickets
2012-05-28 13:16:38     100003286974944    9             1741        cpf      2
2012-05-28 13:16:13     100003286974944    9             1741        cpf      4

私がやりたいのは、最新の行を取得することですactionID = 'cpf'

私が試したことは次のとおりです。

SELECT CONCAT_WS(' ', y.firstName, y.lastName) as fullName, x.facebookID, x.numOfTickets, MAX(x.timestamp) 
FROM E4S_ANALYTICS.e4s_analytic_data x INNER JOIN E4S_FB.e4s_user_details y ON x.facebookID = y.facebookID 
WHERE (x.actionID = 'CPF' AND x.numOfTickets > 0 AND x.producerID = 9 AND TIMEDIFF(NOW() , x.timestamp) < '00:09:00' 
AND x.facebookID IN (SELECT facebookID FROM  E4S_FB.e4s_session_data WHERE 
                     TIMEDIFF(NOW() , sessionStart) < '00:09:00' ))

クエリの結果は次のとおりです。

facebookID      numOfTickets    MAX(x.timestamp)
100003286974944  4              2012-05-28 13:16:38

返されたタイムスタンプは正しいですが、numOfTickets2 ではなく 4 です。

注、内部クエリ:

SELECT facebookID FROM  E4S_FB.e4s_session_data 
WHERE TIMEDIFF(NOW() , sessionStart) < '00:09:00' ))

誰がまだアプリケーションにログインしているかを確認するために使用されます。

4

3 に答える 3

1
SELECT CONCAT_WS(' ', y.firstName, y.lastName) AS fullName,
       x.facebookID,
       x.numOfTickets,
       x.timestamp
FROM   (
         SELECT *
         FROM   E4S_ANALYTICS.e4s_analytic_data
         WHERE  actionID = 'cpf'
            AND numOfTickets > 0
            AND producerID = 9
            AND TIMEDIFF(NOW() , timestamp) < '00:09:00' 
            AND (facebookID, timestamp) IN (
                  SELECT   facebookID, MAX(timestamp)
                  FROM     E4S_ANALYTICS.e4s_analytic_data
                  WHERE    actionID = 'cpf'
                       AND numOfTickets > 0
                       AND producerID = 9
                       AND TIMEDIFF(NOW() , timestamp) < '00:09:00' 
                       AND facebookID IN (
                             SELECT facebookID
                             FROM   E4S_FB.e4s_session_data
                             WHERE  TIMEDIFF(NOW() , sessionStart) < '00:09:00'
                           )
                  GROUP BY facebookID
                )
       ) AS x
  INNER JOIN E4S_FB.e4s_user_details AS y USING (facebookID)
于 2012-05-28T12:19:57.630 に答える
0

MAX() を使用しないようにしましたか? JOIN と SUBQUERY の結果を確認したと仮定します。

SELECT CONCAT_WS(' ', y.firstName, y.lastName) as fullName, x.facebookID, x.numOfTickets, MAX(x.timestamp) 
FROM E4S_ANALYTICS.e4s_analytic_data x 
INNER JOIN E4S_FB.e4s_user_details y ON x.facebookID = y.facebookID 
GROUP BY x.facebookID
WHERE (x.actionID = 'CPF' AND x.numOfTickets > 0 AND x.producerID = 9 AND TIMEDIFF(NOW() , x.timestamp) < '00:09:00' 
AND x.facebookID IN 
     (SELECT facebookID FROM  E4S_FB.e4s_session_data 
      WHERE TIMEDIFF(NOW() , sessionStart) < '00:09:00' ))
ORDER BY x.timestamp DESC;
于 2012-05-28T11:46:42.657 に答える
0

order by timestamp desc最新順に列を並べ替えてから、最初の行を選択するために使用できます。
または を使用してみてくださいmax

于 2012-05-28T11:49:19.647 に答える