SQLite MAX 函数更具时间筛选出最新一条重复数据
SQLite MAX 函数更具时间筛选出最新一条重复数据
刚刚还了工作,最近在升级新公司项目的时候遇到一个问题——筛选(select)出最新的一条重复数据。虽然简单来说解决这个问题并不复杂,但是由于其他种种原因导致这个问题处理起来并不那么容易,这里就不吐槽了。具体内容如下:
(由于是公司现有项目,下面的内容会将部分数据进行处理并非原始数据。)
从表AH_FARMER_R中查询is_change=’1’的相关数据。
如下:
select FARMER_CN,CREATORTIME from farmer where is_change='1' order by FARMER_CN,CREATORTIME desc
| id | FARMER_CN | CREATORTIME |
|---|---|---|
| 1 | 2140014 | 2016-12-26 11:29:43 |
| 2 | 406201X | 2017-01-23 15:00:18 |
| 3 | 406201X | 2016-12-26 11:29:34 |
| 4 | 406201X | 2016-12-26 11:16:51 |
| 5 | 4292010 | 2017-01-23 14:59:25 |
| 6 | 6012010 | 2017-01-23 14:57:24 |
| 7 | 6012010 | 2016-12-26 11:16:53 |
| 8 | 7082042 | 2017-01-23 14:57:42 |
| 9 | 7142016 | 2017-01-23 14:59:14 |
| 10 | 8574444 | 2017-01-23 15:00:42 |
| 11 | 8574444 | 2016-12-26 11:18:51 |
| 12 | 8574444 | 2016-12-26 11:18:36 |
| 13 | 8574444 | 2016-12-26 11:16:28 |
表中分别“406201X“,”6012010”,”8574444” 三组重复数据。然而具体要求希望的到的是最新的数据——即查询出的结果不包括上表中的第3,4,7,11,12,13行数据。
由于SQLite 中不支持ROW_NUMBER() OVER(PARTITION BY...) 所以这里使用MAX(column_name)函数并结合group by ,具体如下:
select FARMER_CN,CREATORTIME,Max(CREATORTIME) from farmer where is_change='1' group by FARMER_CN
搜寻结果如下:
可能是自己对数据库操作并不熟悉把,所以对于MAX 函数我也一直认为是对数字类型的操作 。而且SQLite 中也没有单独的用于存储日期和/或时间的存储类——也就是说这里的CREATORTIME也就是一个格式化的字符串,那Max是怎么比较的?我也确实不懂,还希望有了解的人能指点一二。好人一生平安。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
