Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何为消息查询添加日期行?_Sql_Sqlite - Fatal编程技术网

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