【发布时间】:2013-07-12 12:12:15
【问题描述】:
我有一个名为user_transaction 的数据库表,其结构如下:
transaction_id mediumint(6) UNSIGNED (PK)
transaction_no varchar(55)
transaction_cc_avenue_no varchar(55)
transaction_card_category varchar(100)
transaction_user_id varchar(32)
transaction_user_name varchar(255)
transaction_user_email_id varchar(255)
transaction_deal_code varchar(10)
transaction_dc_id smallint(4)
transaction_amount float(10,2)
transaction_discount float(10,2)
transaction_total_amount float(10,2)
transaction_data_assign enum('0', '1')
transaction_status enum('success', 'inprocess', 'fail', 'cancelled')
transaction_date bigint(12)
transaction_update_date bigint(12)
transaction_update_user_id varchar(32)
我正在使用 UNIX 时间戳值将日期存储在 transaction_date 列中。现在我想显示按月排列的编号。表中所有 transaction_dates 的不同 transaction_status 的交易(即每个日期发生的总交易,状态为“成功”、“处理中”、“失败”和“已取消”的交易总数)。这些记录应按月分组。我尝试了很多来获得这个结果,但没有取得任何成功。供您参考,我在查询下方给出:
SELECT COUNT(*) `total count`, SUM(transaction_status = 'success') `success`, SUM(transaction_status = 'inprocess') `inprocess`, SUM(transaction_status = 'fail') `fail`, SUM(transaction_status = 'cancelled') `cancelled` FROM user_transaction GROUP BY FROM_UNIXTIME(transaction_date)
有人可以在这方面帮助我吗?提前致谢。
【问题讨论】:
-
@Eric Wich & @D Mac:我想显示月份。出色地。那我应该怎么写查询呢?
-
我已经更新了我的答案以显示年份和月份(您需要年份,以便在年份变化时消除月份的歧义)。
-
@Eric Wich:通过使用您的查询,我得到的是按日期而不是按月的结果。
-
您是否将 transaction_date 更改为日期而不是 bigint?您是否包含了“GROUP BY MONTH(transaction_date)”语句?
-
@DMc: 不,我没有将 transaction_date 数据类型从 bigint 更改为 date,而是使用了 GROUP BY MONTH(transaction_date)
标签: php mysql sql unix-timestamp