0

ID、日付 (文字列)、および INT の 3 つのフィールドを持つテーブルがあります。このような。

+---------------------------
+BH|2012-09-01|56789
+BH|2011-09-01|56765
+BH|2010-08-01|67866
+CH|2012-09-01|58789
+CH|2011-09-01|56795
+CH|2010-08-01|67866
+DH|2012-09-01|52789
+DH|2011-09-01|56665
+DH|2010-08-01|67866

基本的に ID ごとに必要です。日付文字列が最も高い行のみを返す必要があります。この例から、私の結果はある必要があります。

+---------------------------
+BH|2012-09-01|56789
+CH|2012-09-01|58789
+DH|2012-09-01|52789
4

3 に答える 3

1
SELECT t.id, t.date_column, t.int_column
    FROM YourTable t
        INNER JOIN (SELECT id, MAX(date_column) AS MaxDate
                        FROM YourTable
                        GROUP BY id) q
            ON t.id = q.id
                AND t.date_column = q.MaxDate
于 2012-04-27T21:10:01.683 に答える
0
SELECT id, date, int
FROM (  SELECT id, date, int
        FROM table_name
        ORDER BY date DESC) AS h
GROUP BY id

table_name と列を正しいものに置き換えます。

于 2012-04-27T21:07:33.260 に答える
0

次の構造を想定しています。

CREATE TABLE  `stackoverflow`.`table_10357817` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Date` datetime NOT NULL,
  `Number` int(11) NOT NULL,
  `Code` char(2) NOT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1

次のクエリでは、期待される結果が得られます。

SELECT Code, Date, Number
FROM table_10357817
GROUP BY Code
HAVING Date = MAX(Date)

GROUP BY はコードごとに 1 つの結果を強制し (id と呼びました)、HAVING 句はコード/id ごとの最大日付に一致するデータのみを返します。

アップデート

次のデータ スクリプトを使用しました。

INSERT INTO table_10357817 
    (Code, Date, Number)
VALUES 
    ('BH', '2012-09-01', 56789),
    ('BH', '2011-09-01', 56765),
    ('BH', '2010-08-01', 67866),
    ('CH', '2012-09-01', 58789),
    ('CH', '2011-09-01', 56795),
    ('CH', '2010-08-01', 67866),
    ('DH', '2012-09-01', 52789),
    ('DH', '2011-09-01', 56665),
    ('DH', '2010-08-01', 67866)
于 2012-04-27T21:30:08.927 に答える