我有一个名为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
列中。现在我以“dd/mm/yyyy
”格式从表单中提取两个日期,在UNIX时间戳中将其转换并在以下查询中使用它。现在我要显示日期号码。不同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 WHERE transaction_date >= '1325376000' AND transaction_date <= '1338422400' GROUP BY FROM_UNIXTIME(transaction_date)
在这方面有谁能帮助我?提前谢谢。
答案 0 :(得分:1)
from_unixtime()
功能会创建一个带有时间的日期。你只想要日期:
SELECT date(FROM_UNIXTIME(transaction_date)),
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
WHERE transaction_date >= 1325376000 AND transaction_date <= 1338422400
GROUP BY date(FROM_UNIXTIME(transaction_date))
我还从数字常量中删除了'
。这些是数字,因此使它们看起来像字符串是错误的(不影响性能,只是查询的可理解性)。
编辑:
如果您想按月分组:
SELECT year(date(FROM_UNIXTIME(transaction_date))),
month(date(FROM_UNIXTIME(transaction_date))),
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
WHERE transaction_date >= 1325376000 AND transaction_date <= 1338422400
GROUP BY year(date(FROM_UNIXTIME(transaction_date))),
month(date(FROM_UNIXTIME(transaction_date)))
您可能需要更改所包含日期范围的where
子句。