有一张表
id good_id good_value create_time
1 101 5 2020-06-06 00:38
2 101 10 2020-06-06 00:38
3 102 8 2020-06-05 01:01
4 102 10 2020-06-06 00:38
现在要求如果 create_time 相同的情况下,并且 good_id 相同的情况下就将 good_value 相加在一起.
最终查询的 结果应该是:
id good_id good_value create_time
1 101 15 2020-06-06 00:38
3 102 8 2020-06-05 01:01
4 102 10 2020-06-06 00:38
可以用 sql 查询出来吗?我在网上找了一圈都没找出解决方案来,如果有同好门给出查询语句,直接支付宝 发 50 元红包。
1
ez4hc 2020-06-06 18:23:54 +08:00
SELECT id,good_id,sum(good_value),create_time FROM good_6_6 GROUP BY good_id,create_time;
|
2
xuuuu 2020-06-06 18:28:59 +08:00
sum(good_value) groupby create_time,good_id
|
3
zhaohy 2020-06-06 18:47:21 +08:00 via iPhone
来晚了,哈哈
|
4
lxk11153 2020-06-06 18:50:55 +08:00
粗活我来,我拿手滴,以后请直接 call cXEvd3g6IDQ0Mzk3NDE1OQ== (base64)
|
5
xiaowenxi OP @ez4hc 稍等,因为我是由其他项目, 项目实际,数据大约有 4 万多条和 7 万多条,等我联查下,看下问题出哪了?可以给我个微信吗?我感觉查出来的数据还是不对,也可能是我描述问题有错误
|
6
noahsophie 2020-06-06 19:09:23 +08:00
微信:bm9haF9zb3BoaWU= 免费
|
7
miaeLKK 2020-06-06 19:37:09 +08:00 via Android 1
我怀疑你是来做慈善的,哈哈
|
9
qiayue 2020-06-06 21:04:08 +08:00
group by 可解决,如果数据不对,你先建一张小表测试下
|
10
lotosbin 2020-06-06 21:08:33 +08:00
SELECT min(id),good_id,sum(good_value),create_time FROM good_6_6 GROUP BY good_id,create_time;
|
11
Xusually 2020-06-06 21:13:47 +08:00
其实先不说 sql 的事儿,楼主找了这么长时间,其实完全可以程序遍历一遍这个表,跑一遍对比汇总另存一张表就结束了
结果表还可以用来和单条 sql 对照,不是美滋滋 |
12
fareware 2020-06-06 22:17:17 +08:00
这种难度的话...,我愿意做长期 SQL 外包
|
13
DelayNoMay 2020-06-06 23:28:14 +08:00
这种难度也太难了吧
|
14
DelayNoMay 2020-06-06 23:30:24 +08:00 1
@ez4hc 你这条 sql 运行会报错的,多查了一个 id 的字段
|
15
dallaslu 2020-06-06 23:46:06 +08:00
啊痛失 50 元
|
16
xiaowenxi OP 我搞了一天了,还没有弄出来,我还是把原想法说出来把。
现在有 2 张表,一张是 invoice 表,一张是 charge 表,多对多的关系,我现在需要导出大约 4.5w 条数据, 我需要获取的数据是:invoice_number/ ctime/account_id/amount/ 这 4 个数据就可以了,总共大约 4.5w 个 invoice_number 最难的部分 是价格是动态生成的,有其他几个表相加得到的。 第一张表: ``` id invoice_number date type from_date to_date ctime account_id 75560 101560 2020-06-01 1 2020-06-01 2020-06-01 2020-06-01 09:59:46 2162 75686 101686 2020-06-02 1 2020-06-02 2020-06-02 2020-06-02 13:06:02 2162 ``` ``` id shipment_id account_id amount describe ctime type val_type value status 1350092 69149374 2162 307.03 base rate 2020-06-01 09:59:45 1 2 307.03 0 1350093 69149374 2162 46.05 markup rate 2020-06-01 09:59:45 1 1 15.00 0 1350094 69149374 2162 353.08 base and markup rate 2020-06-01 09:59:46 1 2 353.08 1 1350095 69149374 2162 24.72 Fuel Surcharge 2020-06-01 09:59:46 2 1 7.00 1 1350096 69149374 2162 5.00 FTZ 2020-06-01 09:59:46 2 2 5.00 1 1350097 69149374 2162 66.65 Emergency Surcharge 2020-06-01 09:59:46 2 3 4.30 1 1350098 86932456 2162 45.92 base rate 2020-06-01 09:59:47 1 2 45.92 0 1350099 86932456 2162 4.59 markup rate 2020-06-01 09:59:47 1 1 10.00 0 1350100 86932456 2162 50.51 base and markup rate 2020-06-01 09:59:47 1 2 50.51 1 1351155 35763591 2162 86.00 Other(Out of delivery surcharge) 2020-06-02 13:06:02 3 2 86.00 0 1 ``` 得到的最终的数据是 ``` invoice_number ctime amount 101560 2020-06-01 09:59:46 2162 499.96 这个 499 的价格是 几单不同 shipment 单 id 下 status 为 1 同一账户 id 2162 ,时间是一定小范围 小于 1 小时 的价格相加得到的 = 353.08 +24.72+5.00+66.65+50.51 =499.96 101686 2020-06-02 13:06:02 2162 86.00 这个单得到的少。 ``` 希望我已经描绘清楚了。 因为今天晚上我必须要搞定。 |
17
xiaowenxi OP 我擦,我肝了一晚上,我肝出来了,由于查询的时间问题,只能半年半年的查,然后导出到 csv,在这贴下代码
select a.account_id,a.shipment_id,a.value,b.invoice_number,a.registerTime from(select account_id,shipment_id,sum(account_amount) as value, DATE_FORMAT(ctime,'%Y-%m-%d') as registerTime from w2s_charge_datail where `status` = 1 and ctime BETWEEN '2017-1-1 00:00:00' and '2017-6-1 00:00:00' GROUP BY account_id,registerTime) a LEFT JOIN (select invoice_number,account_id,DATE_FORMAT(ctime,'%Y-%m-%d') as cTime from w2s_invoice where type = '1' and ctime BETWEEN '2017-1-1 00:00:00' and '2017-6-1 00:00:00') b on a.registerTime = b.cTime and a.account_id = b.account_id GROUP BY invoice_number DESC; |