Sql 如何为消息查询添加日期行?
我有一张留言表Sql 如何为消息查询添加日期行?,sql,sqlite,Sql,Sqlite,我有一张留言表 id | sender_id | message | date 1 | 1 | Cya | 10/10/2020 2 | 2 | Bye | 10/10/2020 3 | 1 | Heya | 10/11/2020 我想插入日期行和基于日期的类型列,因此看起来像这样 id | sender_id | message | date | type 1 | null | null
id | sender_id | message | date
1 | 1 | Cya | 10/10/2020
2 | 2 | Bye | 10/10/2020
3 | 1 | Heya | 10/11/2020
我想插入日期
行和基于日期
的类型
列,因此看起来像这样
id | sender_id | message | date | type
1 | null | null | 10/10/2020 | date
1 | 1 | Cya | 10/10/2020 | message
2 | 2 | Bye | 10/10/2020 | message
2 | null | null | 10/11/2020 | date
3 | 1 | Heya | 10/11/2020 | message
3 | null | null | 10/11/2020 | date
按日期排序时,键入,第一行和最后一行是日期。并且每两条消息之间都有一个date
行,不同的日期具有后面的日期值
我不知道如何解决这个问题。请告诉我你对如何处理这个问题有什么想法。嗯。我想你想要联合所有人:
select id, sender_id, message, date, 'message' as type
from t
union all
select id, null, null, date, 'date'
from t
order by id;
编辑:
根据您的评论:
select id, sender_id, message, date, 'message' as type
from t
union all
select min(id), null, null, date, 'date'
from t
group by date
这相当复杂,因为您希望新行包含下一个日期,但包含上一个max id(如果存在),并且在末尾还有一行。
因此,您可以对3种不同的情况使用
UNION ALL
:
select id, sender_id, message, date, type
from (
select id, sender_id, message, date, 'message' as type, 2 sort
from Messages
union all
select lag(max(id), 1, min(id)) over (order by date), null, null, date, 'date', 1
from Messages
group by date
union all
select * from (
select id, null, null, date, 'date', 3
from Messages
order by date desc, id desc limit 1
)
)
order by date, sort, id
请注意,只有当您的日期格式为YYYY-MM-DD
时,这才有效,这是可比较的,也是SQLite唯一有效的日期格式。请参阅。
结果:
用你正在使用的数据库标记你的问题。很抱歉,你的问题模棱两可。从中可以在
类型中获取此数据。它是否来自另一个表,并且您希望在两个表之间创建一个联接??请对您的问题稍加努力,以便我们了解您想要完成什么。这将为每个消息行创建一个日期行,但我只希望为每个唯一的日期@IlyaGazman创建一个日期行。这不是你的问题所显示的。有三行日期,两行日期重复。是的,也许我解释得不好。每个“日期”类型都有一个唯一的日期
,但“消息”类型可能有重复的日期。Tnx的关键解决方案是合并表的分组版本和非分组版本。“日期”id对我来说并不重要。
> id | sender_id | message | date | type
> -: | :-------- | :------ | :--------- | :------
> 1 | null | null | 2020-10-10 | date
> 1 | 1 | Cya | 2020-10-10 | message
> 2 | 2 | Bye | 2020-10-10 | message
> 2 | null | null | 2020-10-11 | date
> 3 | 1 | Heya | 2020-10-11 | message
> 3 | null | null | 2020-10-11 | date