选择一列中具有非空值的最新记录
我的表数据看起来像这样
id | keyword | count | date
1 | ipod | 200 | 2009-08-02
2 | ipod | 250 | 2009-09-01
3 | ipod | 150 | 2009-09-04
4 | ipod | NULL | 2009-09-07
现在我要做的是获取具有最新日期但不为空计数的行的计数。在这种情况下,第 3 行的计数为 150。)
例如,
SELECT `keyword`, `count` , max( `date` )
FROM `keywords`
WHERE keyword = "ipod"
AND `count` IS NOT NULL
GROUP BY keyword
这返回了正确的日期,但不是正确的计数(返回 200)。我还尝试对其自身进行左连接。
SELECT `t1`.`keyword` , `t2`.`count` , max( `t1`.`id` )
FROM `keywords` `t1`
LEFT JOIN `keywords` `t2` ON `t1`.`id` = `t2`.`id`
WHERE `t1`.`keyword` = 'ipod'
AND `t1`.`count` IS NOT NULL
GROUP BY `t1`.`keyword`
这确实获得了最大 id,但它没有像我希望的那样左连接,只返回 200。
有帮助吗?
I have table data which looks like this
id | keyword | count | date
1 | ipod | 200 | 2009-08-02
2 | ipod | 250 | 2009-09-01
3 | ipod | 150 | 2009-09-04
4 | ipod | NULL | 2009-09-07
Now what I am after is getting the count of the row which has the newest date but has a not null count. In which case row 3 with count 150.)
eg
SELECT `keyword`, `count` , max( `date` )
FROM `keywords`
WHERE keyword = "ipod"
AND `count` IS NOT NULL
GROUP BY keyword
This returned the right date but not the right count (returned 200). I also tried doing a left join on it's self.
SELECT `t1`.`keyword` , `t2`.`count` , max( `t1`.`id` )
FROM `keywords` `t1`
LEFT JOIN `keywords` `t2` ON `t1`.`id` = `t2`.`id`
WHERE `t1`.`keyword` = 'ipod'
AND `t1`.`count` IS NOT NULL
GROUP BY `t1`.`keyword`
And this did get the max id but it didn't left-join onto that like I hoped and returned only 200.
Help?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我确信有更好的方法,但同时:
应该满足您的要求。请注意,LIMIT 不是可移植 SQL,因此它仅适用于 MySQL。 ORDER BY 子句对于强制数据库按日期排序是必需的。
当我提到应该有更好的方法时,这仅仅是因为 LIMIT 子句的工作方式,即:数据库必须获取满足查询条件的所有行,然后简单地截断结果设置为
LIMIT
指定的所需数量。I'm sure there's a better way, but in the mean time:
Should fit your requirements. Note that LIMIT is not portable SQL, so it will only work for MySQL. The
ORDER BY
clause is necessary to force the database to sort by, well, date.When I mentioned that there should be a better way, that's merely because of the way the
LIMIT
clause works, which is: The database has to fetch ALL rows that meet the query criteria, then simply truncates the result set to the desired amount specified byLIMIT
.这对你有用吗:
Does this work for you: