比方说,你有一个像这样的表:
-------------------------------
Date Name Type
2017-01-01 John 1
2017-01-02 John 1
2017-01-03 Mike 2
2017-01-04 John 1
-------------------------------
Run Code Online (Sandbox Code Playgroud)
我希望能够按类型分组以获得如下结果
-------------------------
Name Type
John 1
Mike 2
John 1
-------------------------
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,前两行是分组的,因为它们之间没有不同的类型,就像您在移动电话呼叫日志中看到的那样.
我怎样才能在SQLite中实现这一目标?
以下查询通过前一行(如果有)上的NOT EXISTS相同值Name和值来实现此目的。Type通过查找严格小于当前行日期的最大日期来找到上一行。
SELECT *
FROM tbl t1
WHERE NOT EXISTS (
SELECT *
FROM tbl t2
WHERE t2.Name = t1.Name
AND t2.Type = t1.Type
AND t2.`Date` = (SELECT MAX(`Date`)
FROM tbl t3
WHERE t3.`Date` < t1.`Date`)
);
Run Code Online (Sandbox Code Playgroud)
SQL Fiddle 演示: http://sqlfiddle.com/#!5/0700cb /3
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |