mysql - 查询费用和债务的数据库

时间:2013-02-23 22:34:16

标签: mysql

关于下面的样本表,并牢记以下定义,

  • start,end和timestamp都是unix时间戳
  • 定义:duration =((end - start)/ 3600),即以小时为单位

我想获得以下mysql查询:

  1. 按学生分组并计算每个学生花的所有钱 - 即(持续时间x费用)
  2. 这就是我得到的,它有效,但不完整!

    SELECT student, SUM(ceil(cost*(end-start)/3600)) AS expenses 
    FROM schedules GROUP BY student;

    AND(这个不起作用,但这个想法实际上是我想达到的目标)

    SELECT student, SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHERE paid = 1) AS expenses,  SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHERE paid = 0) AS debts FROM schedules GROUP BY student;
    

    我最大的问题是计算从今天到过去的费用以及如果今天的日期大于开始并且付费仍然设置为0的债务


    谢谢大家的意见!


    样本表

    id  meta_id start       end     admin   student tutor   course  cost    paid    paydate      timestamp
    18  4   1359867600  1359867690  jnc banjune cameron 2   90  1   1361521193  1359881165
    19  4   1360472400  1360472490  jnc banjune cameron 2   90  1   1361521195  1359881165
    20  4   1359867600  1359867690  jnc saadcore    cameron 2   90  1   1361547064  1359881165
    25  6   1359914400  1359919800  jnc johndoe cameron 3   35  1   1361547080  1359893058
    26  6   1360000800  1360006200  jnc johndoe cameron 3   35  0   0       1359893058
    27  6   1360087200  1360092600  jnc johndoe cameron 3   35  0   0       1359893058
    

1 个答案:

答案 0 :(得分:0)

我得到了理想的解决方案

SELECT 
student, 
SUM(CASE WHEN paid = 1 AND FROM_UNIXTIME(start) <= now() THEN ceil(cost*(end-start)/3600) 
         ELSE 0 END) as expenses, 
SUM(CASE WHEN paid = 0 AND FROM_UNIXTIME(start) <= now() THEN ceil(cost*(end-start)/3600) 
         ELSE 0 END) as debts 
FROM schedules 
GROUP BY student;