基于时间戳最大值的SQL内连接

标签 sql sqlite max inner-join where-clause

修改一次

修改两次:除报告之外的其余 9 个表格的标题始终称为“what”。

我有大约 10 个表,其结构如下:

reports (165k rows)
+-----------+-----------+
| identifier| category  | 
+-----------+-----------+
| 1         | fixed     |
| 2         | wontfix   |
| 3         | fixed     |
| 4         | invalid   | 
| 5         | later     | 
| 6         | wontfix   | 
| 7         | duplicate | 
| 8         | later     | 
| 9         | wontfix   | 
+-----------+-----------+   
 status (300k rows, all identifiers from reports come up at least once)
+-----------+-----------+----------+
| identifier| time      | what     |
+-----------+-----------+----------+
| 1         | 12        | RESOLVED |
| 1         | 9         | NEW      |
| 2         | 7         | ASSIGNED |
| 3         | 10        | RESOLVED |
| 5         | 4         | REOPEN   |
| 7         | 9         | ASSIGNED |
| 4         | 9         | ASSIGNED |
| 7         | 11        | RESOLVED |
| 8         | 3         | NEW      |
| 4         | 3         | NEW      |
| 7         | 6         | NEW      |
+-----------+-----------+----------+

 priority (300k rows, all identifiers from reports come up at least once)
+-----------+-----------+----------+
| identifier| time      | what     |
+-----------+-----------+----------+
| 3         | 12        | LOW      |
| 1         | 9         | LOW      |
| 9         | 2         | HIGH     |
| 8         | 7         | HIGH     |
| 3         | 10        | HIGH     |
| 5         | 4         | MEDIUM   |
| 4         | 9         | MEDIUM   |
| 4         | 3         | LOW      |
| 7         | 9         | LOW      |
| 7         | 11        | HIGH     |
| 8         | 3         | LOW      |
| 6         | 12        | MEDIUM   |
| 7         | 6         | LOW      |
| 6         | 9         | HIGH     |
| 2         | 6         | HIGH     |
| 2         | 1         | LOW      |
+-----------+-----------+----------+

我需要的是:

 reportsfinal (165k rows)
+-----------+-----------+--------------+------------+
| identifier| category  | what11       |  what22    |
+-----------+-----------+--------------+------------+
| 1         | fixed     | RESOLVED     | LOW        |
| 2         | wontfix   | ASSIGNED     | HIGH       |
| 3         | fixed     | RESOLVED     | LOW        |
| 4         | invalid   | ASSIGNED     | MEDIUM     |
| 5         | later     | REOPEN       | MEDIUM     |
| 6         | wontfix   |              | MEDIUM     |
| 7         | duplicate | RESOLVED     | HIGH       |
| 8         | later     | NEW          | HIGH       |
| 9         | wontifx   |              | HIGH       |
+-----------+-----------+--------------+------------+

也就是说,reports(在查询 = reportsfinal 之后)充当基础表,我必须从其他 9 个表中添加一到两列。 identifier 是关键,但在某些表中,identifier 出现多次。在这些情况下,我只想使用时间最长的条目。 我尝试了几个查询,但没有一个成功。如果可能的话,我想使用这种方法运行一个查询来从其他 9 个表中获取不同的列。

我根据下面的答案尝试了什么:

select  T.identifier,
        T.category,
        t.what AS what11,
        t.what AS what22 from (
     select R.identifier,
     R.category,
     COALESCE(S.what,'NA')what,
     COALESCE(P.what,'NA')what,
     ROW_NUMBER()OVER(partition by R.identifier,R.category ORDER by (select null))RN
     from reports R 
     LEFT JOIN bugstatus S
     ON S.identifier = R.identifier
     LEFT JOIN priority P
     ON P.identifier = s.identifier

     GROUP BY R.identifier,R.category,S.what,P.what)T
     Where T.RN = 1
     ORDER BY T.identifier;

这给出了错误:

Error: near "(": syntax error.

最佳答案

基本上,您需要在选择列表中关联子查询。

从臀部开始,类似:

Select a.Identifier
,a.Category
,(select process
    from status where status.identifier = a.Identifer order by time desc limit 1) Process
,(select prio
    from priority where priorty.identifier = a.Identifer order by time desc limit 1) prio
From Reports a

关于基于时间戳最大值的SQL内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34235904/

相关文章:

sql - 在 PostgreSQL 中交换具有 UNIQUE 约束的列的记录值

mysql - mysqli 中更新字段的返回值

mysql - SQL重用一个子查询 'AS'作为另一个子查询的参数

iphone - 在 iphone 中查找上次更新 sqlite 的日期

html - 图片未上传

sql - ORA-00932(数据类型不一致 : expected - got CLOB) error that I do not understand

python - 值错误 : operation parameter must be str

c# - 从随机数组中提取最小值和最大值以显示

perl - 从 Perl 中的散列中获取具有最高值的键的最简单方法是什么?

python - 查找 Numpy 数组中每 n 个实例的最大值