通过在列上重复来过滤SQL数据

时间:2014-09-02 08:36:06

标签: sql google-bigquery

这里非常简单的基本SQL问题。

我有这张桌子:

Row Id __________Hour__Minute__City_Search   
1___1409346767__23____24_____Balears (Illes)     
2___1409346767__23____13_____Albacete    
3___1409345729__23____7______Balears (Illes)     
4___1409345729__23____3______Balears (Illes)     
5___1409345729__22____56_____Balears (Illes)    

我想要获得的只是ID的一个不同的行,并选择由相同的Id制作的最后一个City_Search。 因此,在这种情况下,结果将是:

Row Id __________Hour__Minute__City_Search   
1___1409346767__23____24_____Balears (Illes)     
3___1409345729__23____7______Balears (Illes)

更简单的方法是什么?

显然,我不想删除任何数据只是查询它。

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

您可以将小时/分钟更改为时间戳吗?

在这种情况下,您需要首先选择唯一标识行的内容:

Select id, max(time) from [table] group by id

然后使用该查询向其添加数据。

SELECT id,city search, time 
FROM (SELECT id, max(time) as lasttime FROM [table] GROUP BY id) as Tkey
INNER JOIN [table] as tdata
ON tkey.id = tdata.id AND tkey.lasttime = tdata.time

应该这样做。

答案 1 :(得分:1)

SELECT Row,
       Id,
       Hour,
       Minute,
       City_Search
FROM   Table T
       JOIN
       (
           SELECT MIN(Row) AS Row,
                  ID
           FROM   Table
           GROUP BY ID
       ) AS M
       ON M.Row = T.Row
          AND M.ID = T.ID

答案 2 :(得分:0)

没有加入的两个选项...

  1. 使用Row_Number函数查找最后一个

    选择* FROM (选择 *, row_number()over(Part BY BY ID Order BY Hour desc Minutes Desc)作为RNB 来自表) 其中RNB = 1

  2. 操纵字符串并使用简单的Max函数

    选择ID,右(MAX(Concat(小时,分钟,RPAD(Searc,20,''))),20) 从表格 按ID分组

  3. 避免加入通常要快得多......

    希望这有帮助