[英]MySQL select older rows than x days, group by and order by and limit
很久以前,我做了一个非常丑陋的SQL表。 但是现在我需要使用其中的数据。 该表如下所示: id => 1
video_id => gds1513sfsd51
user_ip => 244.154.16..
datum => 2011-01-11 10:10:10
referer => http://something.com
user_id => 1
我喜欢对子级获得这些行是在30天以前,但我想group
他们通过video_id
和order
由id
降序
所以,这些是行
id video_id ip datum user_id
527557 152547560451c58ca74e2e8 162.217.250.110 2013-11-18 21:53:10 1
527556 152547560451c58ca74e2e8 162.217.250.110 2013-11-18 21:53:07 1
527369 152547560451c58ca74e2e8 162.217.250.110 2013-11-18 21:37:03 1
515760 152547560451c58ca74e2e8 108.178.60.2 2013-11-15 02:33:45 1
515763 252547560451c58ca74e2e9 108.178.60.2 2013-10-15 02:33:45 2
515764 252547560451c58ca74e2e9 108.178.60.5 2013-10-14 02:33:45 2
我只想获取ID为515763
的行,因为该行已超过一个月,并且该video_id
没有更新的video_id
。
我试图做这样的事情:
$format = 'Y-m-j G:i:s';
$date = date ( $format );
// - 1 month from today
$datum = date ( $format, strtotime ( '-1 month' . $date ) );
$query = 'SELECT * FROM video_megtekintes WHERE datum <= "'.$datum.'" group by video_id order by id desc LIMIT 100';
print($query.'<hr>');
$le = mysql_query($query);
while($i = mysql_fetch_assoc($le)){
print($i["video_id"].' - '.$i["datum"].'');
$ok = mysql_fetch_assoc(mysql_query('SELECT * FROM video_megtekintes WHERE video_id="'.$i["video_id"].'" ORDER BY id DESC LIMIT 1'));
print(' - <b>'.$ok["datum"].'</b><br>');
//
但是输出现在是这样的:(video_id | datum |以及具有相同video_id的最新行的数据)
video_id datum from_a_new_query_it_shows_me_there_is_newer
1000657739521a10654224f - 2013-08-25 19:15:26 - 2013-12-05 05:56:20
100155265051bde3b822f84 - 2013-06-18 20:59:31 - 2013-11-04 23:48:06
10024035651dc34f02b5d4 - 2013-07-14 10:10:52 - 2013-10-04 19:57:06
我不想看到第一行,因为它有两个日期。那个video_id的日期比一个月新。 你能帮我一下吗?
这是查询:
$query = 'SELECT * FROM video_megtekintes WHERE datum <= "'.$datum.'" group by video_id order by id desc LIMIT 100';
这为您提供了超过1个月的记录的最新video_id(即只有1行)。 另外video_id在上个月内没有任何记录。
SELECT *
FROM video_megtekintes
JOIN (
SELECT video_megtekintes.video_id AS video_id, MAX(video_megtekintes.datum) as maxdate
FROM video_megtekintes
LEFT JOIN video_megtekintes AS newer_t
ON newer_t.video_id = video_megtekintes.video_id
AND newer_t.datum > DATE_SUB(NOW(),INTERVAL 1 MONTH)
WHERE video_megtekintes.datum <= DATE_SUB(NOW(),INTERVAL 1 MONTH)
AND newer_t.video_id IS NULL
GROUP BY video_id) AS t1
ON video_megtekintes.datum = t1.maxdate
AND video_megtekintes.video_id = t1.video_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.