计算/检查mysql表中条目的第一个实例

时间:2013-10-24 17:29:13

标签: php mysql

  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年11月10日,用户1访问但不是他们的第一次,所以返回0 在2013年10月10日,用户1和2第一次访问,所以返回2.

显然,使用简单查询可以计算指定日期的条目数,但是只有先前行中没有user_id时,才允许我使用什么方法。

该表按日期排序,这意味着更新的日期永远不应该具有比旧日期更小的ID。

任何想法?谢谢!

5 个答案:

答案 0 :(得分:3)

按用户查找所有“第一次” - 日期:

SELECT user_id, MIN(date_tracked) AS first_date
FROM table
GROUP BY user_id

为每个日期计算“第一次”:

SELECT t.first_date, COUNT(*) AS nb
FROM (SELECT user_id, MIN(date_tracked) AS first_date
FROM table
GROUP BY user_id) t
GROUP BY t.first_date

答案 1 :(得分: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
);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果计算为一,如果用户在第一天多次访问,您可以通过两种方式进行:

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并且不必进行区分来更清晰。

sqlfiddle demo

答案 4 :(得分:0)

通过你的标签我假设你也希望你的答案在PHP中。 只有一个问题:不应该在10-10-2013返回3吗? 无论如何你可以试试这个:

<?php

$ dbConnect = @mysqli_connect($ host,$ user,$ pass)或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);

&GT;