0

关于下面的示例表,并牢记以下定义,

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

我想得到以下mysql查询:

  1. 按学生分组并计算每个学生花费的所有金钱 -​​ 即(持续时间 x 成本)

这就是我得到的,它有效,但不完整!

SELECT student, SUM(ceil(cost*(end-start)/3600)) 作为费用
从时间表按学生分组;

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

SELECT student, SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHEREpaid = 1) AS 费用,SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHEREpaid = 0)作为学生按计划分组的债务;

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


谢谢大家的想法!


样品表

id meta_id start end admin 学生导师 课程费用 支付 paydate 时间戳
18 4 1359867600 1359867690 jnc 班琼卡梅伦 2 90 1 1361521193 1359881165
19 4 1360472400 1360472490 jnc 班琼卡梅伦 2 90 1 1361521195 1359881165
20 4 1359867600 1359867690 jnc saadcore 卡梅隆 2 90 1 1361547064 1359881165
25 6 1359914400 1359919800 jnc 约翰多·卡梅伦 3 35 1 1361547080 1359893058
26 6 1360000800 1360006200 jnc 约翰多·卡梅伦 3 35 0 0 1359893058
27 6 1360087200 1360092600 jnc 约翰多·卡梅伦 3 35 0 0 1359893058
4

1 回答 1

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;
于 2013-02-24T19:13:08.993 回答