1
  id          | user_id        |      date_tracked
---------------------------------------------
 1001         |  1             | 10-10-2013
 1002         |  2             | 10-10-2013
 1003         |  3             | 10-10-2013
 1004         |  1             | 10-11-2013
 1005         |  2             | 10-12-2013

ユーザーと日付を追跡する、これに似たテーブルがあります。選択した日に発生したユーザーの初回エントリ数を調べる必要があります。このテーブルは大量のデータを保持することになるため、一連の PHP ループではなくクエリを使用してこれを処理したいと考えています。

つまり、2013 年 10 月 11 日にユーザー 1 が訪問したが、初めてではなかったため、2013 年 10 月 10 日にユーザー 1 と 2 が初めて訪問したため、2 を返します。

明らかに、単純なクエリを使用すると、指定された日付のエントリ数をカウントできますが、user_id が前の行に存在しない場合にのみカウントできる方法は何ですか。

テーブルは日付順に並べられています。つまり、新しい日付が古い日付よりも小さい ID を持つことはありません。

何か案は??ありがとう!

4

5 に答える 5

1

フィリペへの返答として、

多分これはもっと適しているでしょうか?

SELECT COUNT(*)
FROM table t1
WHERE t1.date ='2013-8-27'
AND NOT EXISTS (
SELECT 1
FROM table t2
WHERE t2.user_id = t1.user_id
  AND t2.id < t1.id
);
于 2013-10-25T14:59:51.473 に答える
0

SELECT user_id, MIN(date_tracked) FROM table_name GROUP BY user_id

于 2013-10-24T17:36:01.037 に答える
0

ユーザーが初日に複数回アクセスした場合、1 としてカウントするには、次の 2 つの方法があります。

SELECT COUNT(distinct user_id)
FROM user t1
WHERE t1.date_tracked = '2013-10-12' 
AND NOT EXISTS (
    SELECT 1
    FROM user t2
    WHERE t2.user_id = t1.user_id
      AND t2.date_tracked < t1.date_tracked
    );

SELECT COUNT(user_id)
FROM user t1
WHERE t1.date_tracked ='2013-10-12'
AND NOT EXISTS (
SELECT 1
  FROM user t2
  WHERE t2.user_id = t1.user_id
    AND t2.id < t1.id
);

IDを比較し、個別に行う必要がないため、2番目の方がはるかにクリーンなので、私は2番目を好むと思います。

sqlfiddle demo

于 2013-10-24T17:36:48.927 に答える
0

あなたのタグによって、PHPでも答えが欲しいと思います。たった 1 つのクエリ: date 10-10-2013 は 3 を返すべきではありませんか? とにかく、これを試すことができます:

<?php

$dbConnect = @mysqli_connect($host, $user, $pass)or die();

@mysqli_select_db($dbConnect, $dbname) or die();
$query = "SELECT id FROM tablename WHERE date_tracked = '$searchDate' AND (SELECT COUNT(id) FROM tablename WHERE date_tracked < '$searchDate')=0";
$queryResult = @mysqli_query($dbConnect, $query) or die();
$rowCount = mysqli_num_rows($queryResult);
echo $rowCount . "<br/>";

mysqli_close($dbConnect);

?>

于 2013-10-24T19:25:41.147 に答える