相当于SQL的菜鸟,但这就是我的问题。
尝试创建一个返回电视菜单的查询,包含时间和标题,但不是问题,但是......如果有一个背靠背播放的标题,我只想呈现第一个标题和开始时间。
我当前查询的结果如下所示:
Time Title
07.00 Program A
07.45 Program B
08.30 Program C
09.00 Program C
10.00 Program D
11.00 Program A
12.00 Program C
12.30 Program E
我想要的结果是:
Time Title
07.00 Program A
07.45 Program B
08.30 Program C
10.00 Program D
11.00 Program A
12.00 Program C
12.30 Program E
I.E只有在彼此之后发生重复时才会过滤掉重复的内容。
任何提示都会非常感激!
答案 0 :(得分:0)
首先,这需要排序可以代表您的数据排序的列,如果是,那么请使用而不是TIME
列。
例如,我使用了Time
select *
from(select *,
(select title
from table
where time < t.time
order by time desc
limit 1) Prevtitle
from table t
) tt
where (Prevtitle is null) or
(Prevtitle <> title);
但是,某些 DBMS 没有LIMIT
子句支持,如SQL Server,如果是,请改用TOP
子句。
答案 1 :(得分:0)
使用窗口函数可以轻松完成:
select time, title
from (
select time, title,
row_number() over (partition by title order by time) as rn
from the_table
) t
where rn = 1
order by time, title;
以上是ANSI标准SQL,并得到所有现代DBMS的支持。
order by time
会导致根据时间选择第一行。
如果你想选择最后一个,请使用order by time desc
答案 2 :(得分:-1)
我假设你使用MYSQL,
您可以使用GROUP BY
按标题排group行,然后使用max()
检索greater时间。
我在考虑这样的事情:
SELECT max(time), title FROM tv_menu GROUP BY title;
答案 3 :(得分:-1)
您应该使用正确的工具来完成正确的工作。
尝试在select语句中直接解决这个问题,IMO选择不对您的数据编制索引,并将其解压缩,然后使用代码对其进行排序。如果只使用正确的索引,数据库就是精简的,意味着排序的机器。
反之亦然,使用SQL无法轻松解决您的问题,但使用代码则很容易解决。
按常用选择,按时间排序您的选择。然后在您的代码中,您可以执行以下操作:
sudo tcpdump -i any -A "dst port 62655"