创建行时,我有一个包含时间戳的列。
我需要找到一种方法来获取同一天的所有行,并为每一行显示一个显示数字,以显示如下内容:
+---------------------+
| 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
答案 0 :(得分:3)
是的,您可以使用相关查询来执行此操作,如下所示:
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 +计数。
答案 1 :(得分:0)
是的,你可以通过 -
来做到这一点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')
会将日期格式化为yyyymmdd
。
LPAD(COUNT(date_field), 2, '0')
会生成一个字符串,其左边填充(0)到2个位置,并带有该日期的计数。
答案 2 :(得分:0)
这是使用MySQL的一种方式。其他方法在较大的数据集上会更快。
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;