mysql - SQL 分组列
问题描述
我从表中选择(id、group、type、created)。如何仅在第一次遇到“广告”类型(包括“广告”行)之前选择行。在此示例中,我需要 id 为 8207 - 8214 的行。
id | group | type | created_at |
+------+-------+------+------------+
| 8214 | 83 | msg | 1571726466 |
| 8213 | 83 | msg | 1571724983 |
| 8212 | 83 | msg | 1571724982 |
| 8211 | 83 | msg | 1571724978 |
| 8210 | 83 | msg | 1570861659 |
| 8209 | 83 | msg | 1570861656 |
| 8208 | 83 | msg | 1570861650 |
| 8207 | 83 | ad | 1570861643 |
| 8206 | 83 | msg | 1570861632 |
| 8205 | 83 | msg | 1570861623 |
| 8202 | 83 | msg | 1570861617 |
| 8203 | 83 | msg | 1570861617 |
| 8204 | 83 | msg | 1570861617 |
| 8200 | 83 | msg | 1570861616 |
| 8201 | 83 | msg | 1570861616 |
| 8197 | 83 | msg | 1570861615 |
| 8198 | 83 | msg | 1570861615 |
| 8199 | 83 | msg | 1570861615 |
| 8194 | 83 | msg | 1570861614 |
| 8195 | 83 | ad | 1570861614 |
| 8196 | 83 | msg | 1570861614 |
| 8192 | 83 | msg | 1570861613 |
预期的:
+------+-------+------+------------+
| id | group | type | created_at |
+------+-------+------+------------+
| 8214 | 83 | msg | 1571726466 |
| 8213 | 83 | msg | 1571724983 |
| 8212 | 83 | msg | 1571724982 |
| 8211 | 83 | msg | 1571724978 |
| 8210 | 83 | msg | 1570861659 |
| 8209 | 83 | msg | 1570861656 |
| 8208 | 83 | msg | 1570861650 |
| 8207 | 83 | ad | 1570861643 |
UPD:基本上我需要我选择的行的切片,上面有一个行广告。
解决方案
我猜:
select *
from t
where created_at >= (select max(created_at) from t where type = 'ad')
但是,您没有指定仅在第一次遇到“广告”类型之前意味着什么 - 表格是按 ? 排序的created_at
?或者id
?会出现重复created_at
值吗?
推荐阅读
- typescript - 如何在打字稿中创建新对象时进行投射?
- javascript - 如何处理 Angular 上的 CORS 政策问题?
- c - 我如何计算复数的模块
- python - Python BeautifulSoup 从包含属性的任何元素中获取属性值
- vue.js - 如果数组包含值,Vuejs如何显示Div
- mysql - 反应正在将数据发布到控制台,但数据未成功使其成为 mysql 数据库
- time-complexity - 程序的整体时间复杂度?
- r - 为什么我进行更改时闪亮的应用程序没有重新启动?
- r - 在带有循环的函数中添加迭代值
- c# - 在 C# 中,如何检查列表中的重复元素,然后打印重复元素的名称?