0

次のテーブルがあるとします。

NAME DATE OTHER_CONTANT

'A' '2012-06-05' 'baz'
'A' '2012-06-04' 'bar'
'B' '2012-06-05' 'foo'
'C' '2012-06-05' 'bla'
'C' '2012-06-04' 'blah'
'C' '2012-06-06' 'bleh'

ここで、このテーブルをフィルタリングして、一意の NAME と最も古い日付を持つ行のみを含めたいと考えています。

'A' '2012-06-04' 'bar'
'B' '2012-06-05' 'foo'
'C' '2012-06-04' 'blah'

GROUP BY ステートメントを使用することを考えていましたが、GROUP BY では結果として 1 つの列しか取得できず、行全体を取得したいと考えています。このフィルタリングを行う方法の提案はありますか?

4

5 に答える 5

3

以下を使用できます。

select m.name, m.date, m.other_constant 
  from mytable m
  join (select name, min(date) min_date from mytable group by name) n
    on m.name = n.name and m.date = n.min_date

これについてはSQLfiddleも参照してください。

于 2012-06-13T07:46:54.460 に答える
2

次の SQL は、すべての個別の名前のリストを作成します。次に、名前ごとに、日付が最新のエントリを探します。

select  *
from    (
        select  distinct name
        from    YourTable
        ) names
join    YourTable yt1
on      yt1.name = names.name
        and yt1.date =
        (
        select  date
        from    YourTable yt2
        where   yt2.name = yt1.name
        order by
                date
        limit   1
        )

beny23 の SQL Fiddle を使用した実例。

于 2012-06-13T07:37:41.743 に答える
1

どちらのクエリも完全に機能します。

SELECT * 
FROM   MyTable a 
       INNER JOIN (SELECT name, 
                          Min(date) AS date 
                   FROM   MyTable 
                   GROUP  BY name) b 
               ON a.name = b.name 
                  AND a.date = b.date

また

SELECT a.* 
FROM   mytable a 
       LEFT JOIN mytable b 
              ON a.name = b.name
                 AND a.date > b.date 
WHERE  b.name IS NULL 
于 2012-06-13T07:34:39.483 に答える
0
SELECT
    a.name,
    a.date,
    b.other_contant
FROM
    (
        SELECT
            name,
            MIN(date) AS date,
        FROM
            yourtable
        GROUP BY 
            name
    ) a
INNER JOIN
    yourtable b ON a.name = b.name AND a.date = b.date
于 2012-06-13T08:06:24.397 に答える
0
select *
from (
   select name, min(date) as mindate, other_contact
   from table_name group by name
   ) as x
   inner join table_name as f 
   on f.name = x.name and f.date= x.mindate; 
于 2012-06-13T07:42:17.783 に答える