-1

我正在做一个 android 项目.. 而我对平台不太熟悉..

我必须使用一个公共列对我的数据库中的 3 个表进行排序。表详细信息如下...

表位置(字符串日期,字符串日期,字符串时间,字符串 location_address,字符串纬度,字符串经度,long timeInMilli)

表调用(字符串名称、字符串编号、字符串类型、字符串日期、字符串时间、字符串持续时间、long timeInMilli)

表短信(字符串日期、字符串时间、字符串类型、字符串添加、字符串联系人、字符串子、字符串消息、long timeInMilli)

我必须根据 timeInMilli 列对这些表进行排序......

任何人请帮助我,我需要该代码,因为我的项目 submsn 日期是 10 月 23 日...请帮助我...提前谢谢...

4

2 回答 2

2

要连接多个查询的结果,请使用UNION ALL;结果的列名取自第一个子查询:

SELECT rowid AS ID, 'call' AS c_or_s_or_l, date, timeInMilli FROM call
UNION ALL
SELECT rowid,       'SMS',                 date, timeInMilli FROM SMS
UNION ALL
SELECT rowid,       'location',            date, timeInMilli FROM Location
ORDER BY timeInMilli
于 2013-10-17T18:43:17.013 回答
0

我不一定知道 SQLite 中的语法差异,但我可以向您展示 Oracle 中的示例,但概念将保持不变。

所以我设置了你数据的一个子集。表 MLOCATION、MCALL 和 SMS。MLOCATION 包含日期、日期和时间(毫秒)。MCALL 包含名称、号码、日期和时间(毫秒)。SMS 包含日期、类型、消息和时间(毫秒)。因此,正如您所注意到的,我必须在所有列中都具有共同的“timeinmlili”。

我所做的是根据 timeinmilli 的值合并列。您可以使用列标题指定您想要的任何和所有值,然后选择带有 timeinmilli 的表并说“完全连接”,其中该值等于另一个表中的值。

select coalesce(l.MILLI, c.MILLI, s.MILLI) TIMEINMILLI,
  l.DDAY D_DAY,
  c.DNAME D_NAME,
  c.NUM D_NUMBER,
  s.DTYPE D_TYPE,
  s.MSG MESSAGE
from MLOCATION l full join MCALL c
  on l.MILLI = c.MILLI full join SMS s
  on c.MILLI = s.MILLI;

鉴于我创建的表给了我输出:

TIMEINMILLI    D_DAY      D_NAME    D_NUMBER    D_TYPE  MESSAGE
1381730400000  Monday     Thatguy   4786217452  Type1   This is a message
1381903200000  Wednesday  Someone   4897414821  Type3   Word
1381989600000  Thursday   Nafi      1234567891  Type2   LOL

您还可以看到我在SQLFiddle中提供的完整示例。请记住,我是在 Oracle 中执行此操作的,但是您可以将数据库类型更改为 SQLite 以测试您自己的表和架构。

还要向最初将我指向这个方向的人竖起大拇指 -彼得姆

于 2013-10-17T18:11:51.847 回答