2

MySQLクエリについてサポートが必要です。

私はこのテーブルを持っています:

名前| 日付| 街
------ + ------------ + ------
ピーター| 2013-04-01 | ベルリン
ポール| 2013-03-01 | ロンドン
ピーター| 2013-03-01 | ニューヨーク
ピーター| 2013-01-28 | トキオ

それぞれの名前について、表の最初の日付と対応する都市が必要です。

私は試した:

SELECT Name, MIN(Date) as MD, MIN(City) as CN FROM table GROUP BY Name

しかし、日付は都市名に対応していないため、結果は次のようになります。

Peter, 2013-01-028, Berlin

誰かが私にヒントを与えることができますか?

ありがとう

4

5 に答える 5

2

サブクエリを使用してmin(date)byを取得し、nameその結果をとの両方でテーブルに結合する必要がnameありdateます。

SELECT t1.Name, 
  t1.Date as MD, 
  t1.City as CN 
FROM yourtable t1
inner join
(
  select min(date) MinDate, name
  from yourtable
  group by name
) t2
  on t1.name = t2.name
  and t1.date = t2.mindate

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

|  NAME |                             MD |     CN |
---------------------------------------------------
|  Paul |   March, 01 2013 00:00:00+0000 | London |
| Peter | January, 28 2013 00:00:00+0000 |  Tokio |
于 2013-02-05T19:04:38.920 に答える
0

IN句を使用できます。

SELECT yourtable.*
FROM   yourtable
WHERE  (Name, Date) IN (SELECT Name, Min(Date)
                        FROM yourtable
                        GROUP BY Name)

サブクエリは、名前ごとに、名前とその最小日付を返します。外側のクエリは、名前と日付がサブクエリによって返された行に対応するすべての行を返します。

于 2013-02-05T21:00:11.227 に答える
0

これを試して::

SELECT Name, MIN(Date) as MD, City as CN FROM table GROUP BY Name
于 2013-02-05T19:04:11.043 に答える
0

ALEFT JOINは、クエリを複雑にしすぎずに、必要な結果を提供する必要があります。

SELECT m1.* FROM myTable m1
LEFT JOIN myTable m2
  ON m1.Name = m2.Name
 AND m1.`date` > m2.`date`
WHERE m2.Name is NULL

テスト用のSQLfiddle

基本的に、同じ名前の古い行がないすべての行が選択されます。

NAME    DATE          CITY
Paul    2013-03-01    London
Peter   2013-01-28    Tokio
于 2013-02-05T19:06:09.243 に答える
0

これがあなたがそれをする方法です。

SELECT
  m.Name,
  m.Date,
  m.City
FROM mytable as m
INNER JOIN (select min(date) as LDate, name from mytable group by name) as l
    on l.LDate = m.date
      and l.name = m.name
group by m.name

デモ

出力

Name  | Date        | City
-----------------------------
Paul  | 2013-03-01  | London
Peter | 2013-01-28  | Tokio
于 2013-02-05T19:08:06.503 に答える