如何只为标题打印一个名称?

时间:2020-06-08 21:23:14

标签: python mysql video min pgadmin

我正在使用Pgadmin(mysql)。 我必须打印一个名字作为日期(第一年) 所以我的代码给了我这个

"El padrino";1972
"El padrino";1972
"El padrino";1972
"El resplandor";1980
"El resplandor";1981
"Buenos muchachos";1990
"Buenos muchachos";1990
"Forrest Gump";1994
"Forrest Gump";1994
"Tiempos violentos";1994
"Tiempos violentos";1995
"Los 7 pecados capitales";1995

我需要以每部电影中最古老的名字命名。像这样:

"El padrino";1972
"El resplandor";1980
"Buenos muchachos";1990
"Forrest Gump";1994
"Tiempos violentos";1994
"Los 7 pecados capitales";1995

我正在尝试以下代码:

SELECT min(titulo), MIN(EXTRACT(YEAR from f.fecha))
FROM pelicula p, f_estreno_pais f 
WHERE p.id_pelicula = f.id_pelicula
GROUP BY p.id_pelicula, f.fecha
ORDER BY f.fecha;

3 个答案:

答案 0 :(得分:0)

您没有提到数据库系统。如果有windwos函数,这将是一种方法:

准备公用表表达式(cte)。您的表具有“ titulo”和“ fecha”列。用“ titulo”中的“ fecha”对它们进行编号,然后从您的cte中获取第一个数字。

对于SQL Server,语法类似于

;with my_cte as (
   select
      titulo,
      fecha,
      row_number() over (partition by titulo order by fecha) n
   from your_table
 )
select *
from my_cte
where n = 1

其他数据库系统相似。 “混合”表称为“联接两个表”。您的语法非常古老。如果您的数据库系统支持,最好使用现代连接语法。

对于SQL Server 2016,这将是一个完整的运行示例,它将为您带来预期的结果:

drop table if exists #t1
create table #t1 (titulo varchar(255), fecha int)

insert  #t1 values
 ('El padrino',1972),
 ('El padrino',1972),
 ('El resplandor',1980),
 ('El resplandor',1981),
 ('Buenos muchachos',1990),
 ('Buenos muchachos',1990),
 ('Forrest Gump',1994),
 ('Forrest Gump',1994),
 ('Tiempos violentos',1994),
 ('Tiempos violentos',1995),
 ('Los 7 pecados capitales',1995)


 ;with my_cte as (
   select
      titulo,
      fecha,
      row_number() over (partition by titulo order by fecha) n
   from #t1
 )
select *
from my_cte
where n = 1
order by 1

答案 1 :(得分:0)

这听起来像是PostgreSQL SELECT DISTINCT ON查询:

SELECT
    DISTINCT ON (titolo)
    titolo, ano
    ORDER BY titolo, ano;

缺点是它是PostgreSQL特定的扩展,它不能移植到其他数据库中。根据您的情况,这可能重要也可能不重要。

答案 2 :(得分:0)

 SELECT min(p.titulo), MIN(EXTRACT(YEAR from f.fecha)) min_fecha
 FROM pelicula p
 INNER JOIN f_estreno_pais f ON p.id_pelicula = f.id_pelicula
 GROUP BY p.id_pelicula
 ORDER BY min_fecha;

那是解决方案!

相关问题