0

我有一张名为 RELEASE 的表:

*Country, Album, Date_year, Date_month, Date_day*
  Italy    Z      1940       2           27
  Italy    Y      1992       11          22
  Italy    X      1940       1           20
  Italy    R      1998       null        null
  France   W      1944       9           18
  UK       L      1989       8           21
  UK       P      1970       10          1
  Germany  E      2002       null        null

我需要指定一个 SQL 查询,其中包含专辑名称、国家名称和最旧专辑的日期年、月、日)

(如果月和日的值为空也可以)

我不能使用LIMIT、OFFSET、ROWNUM ...我只能使用标准 SQL 结构。

我尝试进行此查询,但不正确

SELECT country, album, min(date_year), min(date_month), min(date_day)
FROM release

结果将是:

 *Country, Album, Date_year, Date_month, Date_day*
  Italy    X      1940       1           20

我该如何解决?谢谢

4

2 回答 2

0

没有测试过,如果它有效,我会感到惊讶。而不是 right 你应该使用 mid(8,len()) h (因为左边总是 8 个字符)

SELECT 
    release.country, 
    right(
        min(

                cast(Date_year as nvarchar)+  cast(Date_month as nvarchar) + cast(Date_Day as varchar) +album
        ),1) Album,
     min(cast(Date_year as nvarchar)+  cast(Date_month as nvarchar) + cast(Date_Day as varchar) +album) minDate
from release
group by country
于 2017-07-13T15:42:22.800 回答
0

这应该可行,最终您需要做的就是以可排序的格式构建日期,然后按它排序。

select release.country, Album, Date_Year, Date_Month, Date_Day from RELEASE

left join
(
        select country, 
               min(date_year*10000+date_month*100+date_day) minDay 
        from RELEASE
        group by country) albumDay

on albumDay.country = RELEASE.country

where 
date_year*10000+date_month*100+date_day = minDay

附带条件是,如果您有多个“最旧”专辑,它将显示所有最旧的联合。问题陈述没有说明如何处理这个问题。

您需要添加 NULL 处理(将每个对日期字段的引用替换为coalesce(date_foo,0);coalesce(date_foo,99);取决于您希望如何处理它们。

于 2017-07-13T16:15:40.997 回答