选择最早的日期和时间从清单中的不同用户的会议
-
12-09-2019 - |
题
我有一个表格的用户接入会议记录的网站的访问者的活动:
accessid, userid, date, time, url
我想检索所有不同的会议userid1234,以及最早的日期和时间为每个这些不同的会议。
SELECT
DISTINCT accessid,
date,
time
FROM
accesslog
WHERE userid = '1234'
GROUP BY accessid
这给我的日期和时间的一个随机排在每个不同的accessid.我读过一些员额推荐使用min()and max(),所以我想:
SELECT DISTINCT accessid, MIN(DATE) AS date, MIN(TIME) AS time FROM accesslog WHERE userid = '1234' GROUP BY accessid ORDER BY date DESC, time DESC
...甚至...
SELECT DISTINCT accessid, MIN(CONCAT(DATE, ' ', TIME)) AS datetime FROM accesslog WHERE userid = '1234' GROUP BY accessid ORDER BY date DESC, time DESC
...但我永远不会得到正确的结果最早的日期和时间。
是什么把戏订购这种查询?
编辑
某事奇怪的发生。...
代码贴在下面通过的法案Karwin正确地检索最早的日期和时间的会议,开始在2009-09.但是,对于会议开始在某一天在2009-08、时间和日期的第一击发生当月是什么样的返回。换句话说, 查询似乎并不是跨越几个月!
例的数据集:
accessid | userid | date | time
1 | 1234 | 2009-08-15 | 01:01:01
1 | 1234 | 2009-09-01 | 12:01:01
1 | 1234 | 2009-09-15 | 13:01:01
2 | 1234 | 2009-09-01 | 14:01:01
2 | 1234 | 2009-09-15 | 15:01:01
至少在我的实际数据表,查询贴在下面发现的跟随 最早的 日期和时间为每两accessid:
accessid | userid | date | time
1 | 1234 | 2009-09-01 | 12:01:01
2 | 1234 | 2009-09-01 | 14:01:01
...和我的猜测,唯一的原因的结果accessid2似乎是正确的,因为它没有命在前一个月。
我疯了吗?
编辑2-
答案是肯定的,我快要疯了。查询工作的上述样品的数据时,放置在一个表中的重复结构。
这里是(截)原始数据。我第一个打击,另一个打击在同一个月,第一个击中的下一个月,然后去打个月。原始数据集有更多的命中的这些点之间,共计462行。
accessid | date | time
cbb82c08d3103e721a1cf0c3f765a842 | 2009-08-18 | 04:01:42
cbb82c08d3103e721a1cf0c3f765a842 | 2009-08-23 | 23:18:52
cbb82c08d3103e721a1cf0c3f765a842 | 2009-09-17 | 05:12:16
cbb82c08d3103e721a1cf0c3f765a842 | 2009-09-18 | 06:29:59
...查询返回2009-09-17值作为最早的价值时的原始表格进行查询。但是,当我复制。....哦,球。
这是因为从2009-08%有一个空的 userid
领域。
解决方案
这是一个变化的"最伟大的-n-每组"的问题涉及在计算器几次,每星期。
SELECT
a1.accessid,
a1.date,
a1.time
FROM
accesslog a1
LEFT OUTER JOIN
accesslog a2
ON (a1.accessid = a2.accessid AND a1.userid = a2.userid
AND (a1.date > a2.date OR a1.date = a2.date AND a1.time > a2.time))
WHERE a1.userid = '1234'
AND a2.accessid IS NULL;
这种工作方式是,我们尝试找到排(a2)具有相同的accessid和用户名和一个较早的日期或时间比行a1。当我们找不到一个较早的排,然后必须a1 可 最早的排。
重新评论,我只是尝试过的样本数据的提供。这里就是我遇到:
+----------+------------+----------+
| accessid | date | time |
+----------+------------+----------+
| 1 | 2009-08-15 | 01:01:01 |
| 2 | 2009-09-01 | 14:01:01 |
+----------+------------+----------+
我使用的MySQL5.0.75在Mac OS X.
其他提示
试试这个
SELECT
accessid,
date,
time
FROM
accesslog
WHERE userid = '1234'
GROUP BY accessid
HAVING MIN(date)
它将返回的所有独特的访问以最少的时间用于每个用户id='1234'.