2016-05-17 10 views
1

行が作成されるときにタイムスタンプを持つ列があります。MySQLは作成日の表示番号を選択します

私は同じ「日」からすべての行を取得する方法を見つけること、そしてこのような何かを表示するには、各行に表示番号を与える必要があります。

+---------------------+ 
| order_date   | // output should be: 
+---------------------+ 
| 2016-05-11 13:01:41 | // 2016051101 
| 2016-05-11 15:54:14 | // 2016051102 
| 2016-05-11 17:16:18 | // 2016051103 
| 2016-05-11 17:35:12 | // 2016051104 
| 2016-05-11 17:55:16 | // 2016051105 
| 2016-05-12 07:16:48 | // 2016051201 
| 2016-05-12 09:30:57 | // 2016051202 
| 2016-05-12 09:56:19 | // 2016051203 
| 2016-05-13 11:27:21 | // 2016051301 
| 2016-05-14 10:15:56 | // 2016051401 
| 2016-05-15 11:35:07 | // 2016051501 
| 2016-05-15 11:39:48 | // 2016051502 
| 2016-05-15 11:40:12 | // 2016051503 
+---------------------+ 

MySQLはこれを行うことができますか?あるいはプログラムがPHPのようにこれを処理すべきか?私が使用


最終クエリ:

SELECT t.order_date, 
    concat(
    DATE_FORMAT(t.order_date, '%Y%m%d'), 
    LPAD(
(SELECT COUNT(*) FROM hz_order s WHERE s.order_date<= t.order_date AND DATE(s.order_date) = DATE(t.order_date)), 
2, 
0))display 
    FROM hz_order t 
    ORDER BY `display` ASC 
+2

はい。またははい。 :-) – Strawberry

+1

選択クエリでも生成され、注文番号を挿入したい場合、または注文番号がすべて準備ができているかどうかはわかりません。 – Epodax

+0

挿入は必要ありませんが、注文はIDですが、日数のある注文番号は表示専用です。 –

答えて

3

はい、あなたはこのように、相関クエリでそれを行うことができます。

+0

これを試しましたが、構文エラーが表示されます。 –

+0

エラーを表示できますか? – sagi

+0

6行目の 'FROM hz_order t'の近くで使用する正しい構文 –

0

はい、あなたはこれを行うことができます - yyyymmddのように日付をフォーマットします

SELECT CONCAT(DATE_FORMAT(date_field, '%Y%m%d'), 
LPAD(COUNT(date_field), 2, '0')) 
FROM table_name 
GROUP BY DATE(date_field) 
ORDER BY date_field DESC 

DATE_FORMAT(date_field, '%Y%m%d')

LPAD(COUNT(date_field), 2, '0')は、その日付のカウントで2桁の左パディング(0で)の文字列を生成します。

SELECT t.order_date, 
     concat(DATE_FORMAT(t.order_date, '%Y%m%d'), 
       (SELECT COUNT(*) FROM YourTable s 
       WHERE s.order_date<= t.order_date 
       AND DATE(s.order_date) = DATE(t.order_date))) 
FROM YourTable t 

これは、YYYYMMDD +カウントとして日付を生成します。

+0

#1055 - Expression#1 SELECTリストの名前がGROUP BY句ではなく、GROUP BY句のカラムに機能的に依存しない非集約カラム 'projecthz.hz_order.order_date'が含まれています。これはsql_mode = only_full_group_byと互換性がありません –

+0

FULL_GROUP_BYがなくても、これは正しくありません。これは、その日のすべての値のカウントと文字列を連結するだけです。 – Strawberry

0

ここではMySQLを使用する方法の1つです。大規模なデータセットでは他の方法も高速になります。

SELECT x.* 
    , CONCAT(DATE_FORMAT(x.order_date,'%Y%m%d'),LPAD(COUNT(*),2,0))oi 
    FROM my_table x 
    JOIN my_table y 
    ON DATE(y.order_date) = DATE(x.order_date) 
    AND y.order_date <= x.order_date 
GROUP 
    BY x.order_date; 
関連する問題