【发布时间】:2019-07-19 20:02:17
【问题描述】:
我有一个存储消息的 sqlite 数据库。它有 4 列,即消息、发送时间、写消息的人和收到消息的人:
现在我想过滤特定人的数据,以便他获得每个人的最后一条消息。我的问题是,我只能通过两种方式(获取和发送)获得最后一条消息。看起来是这样的:
我使用的代码:
SELECT Accounts_2.Benutzername as Sender, Accounts.Benutzername as Empfaenger, Nachrichten.Inhalt, Nachrichten.Zeit
FROM Nachrichten
LEFT JOIN Accounts ON Nachrichten.Empfaenger = Accounts.ID
LEFT JOIN Accounts as Accounts_2 On Nachrichten.Sender = Accounts_2.ID
WHERE (Accounts_2.Benutzername = 'gondolator' OR Accounts.Benutzername = 'gondolator')
group by Accounts.Benutzername, Accounts_2.Benutzername;
我加入帐户数据库以获取用户名。
我现在只想要发送或接收的最后一条消息。两者都不是。
谁能帮助我正确的 SQL 语句?
编辑: 重建表的代码:
CREATE Table Accounts(
ID INTEGER Primary KEY,
Benutzername TEXT NOT NULL UNIQUE);
Create Table Nachrichten(
Sender INTEGER NOT NULL,
Empfaenger INTEGER NOT NULL,
Zeit date NOT NULL,
Inhalt TEXT NOT NULL,
FOREIGN KEY(Sender) REFERENCES Accounts(ID),
FOREIGN KEY(Empfaenger) REFERENCES Accounts(ID));
INSERT INTO Accounts(Benutzername) Values('gondolator');
INSERT INTO Accounts(Benutzername) Values('Killergondel');
INSERT INTO Accounts(Benutzername) Values('Jan');
INSERT INTO Accounts(Benutzername) Values('TestUser');
INSERT INTO Nachrichten(Sender, Empfaenger, Zeit, Inhalt) Values(1, 2,
datetime('now'), 'test test');
INSERT INTO Nachrichten(Sender, Empfaenger, Zeit, Inhalt) Values(1, 3,
datetime('now'), 'huhu');
INSERT INTO Nachrichten(Sender, Empfaenger, Zeit, Inhalt) Values(1, 4,
datetime('now'), 'verdammt?');
INSERT INTO Nachrichten(Sender, Empfaenger, Zeit, Inhalt) Values(2, 1,
datetime('now'), 'TEST');
INSERT INTO Nachrichten(Sender, Empfaenger, Zeit, Inhalt) Values(3, 1,
datetime('now'), 'TEST');
INSERT INTO Nachrichten(Sender, Empfaenger, Zeit, Inhalt) Values(4, 1,
datetime('now'), 'HI');
我使用 datetime('now') 是因为我实际上未能使用成本时间设置它。
【问题讨论】:
-
在您的帖子中包含示例数据和所需结果作为 文本。最好作为前者的
CREATE TABLE和INSERT语句,以便于导入到测试数据库中。