【发布时间】:2018-04-01 21:53:41
【问题描述】:
我阅读了几篇关于此的文章:Select max date, then max time 这似乎最有帮助,但我看不到实现它的方法。
有五张桌子。我加入他们。我只需要从第一个表中选择一个具有最高日期和最高时间的行,从第二个表中选择相同的行,然后将其余的加入到其他值上。使用我编写的代码,我得到了多行。时间选择好像不对。
这可以通过子查询中的子查询来完成。我尝试过这样的事情:
SELECT * from table1
INNER JOIN table2 ON table1.date = table2.date AND table1.gm = table2.gm
INNER JOIN table3 ON table2.gm = table3.gm ...
WHERE table3.date = :date AND table4.date = :date ...
AND table1.date IN(
SELECT MAX(table1.date) FROM table1 WHERE table1.time IN(
SELECT MAX(table1.time) FROM table1
)
)
AND table2.date IN(
SELECT MAX(table2.date) FROM table1 WHERE table2.time IN(
SELECT MAX(table2.time) FROM table2 )
)
ORDER BY table1.id
问题是: 加入所有这些日期最高且该日期时间最高的所有这些后,如何获得单行? 谢谢!
编辑:对此我很抱歉。我忘了说我需要与表(gm 列)中的特定值相关的最大日期的最大时间。因此,对于每个表中相同的每个 .gm 值,这是一行(在示例中我给它的是 table1.gm 和 table2.gm ...),而不仅仅是一行。解决方案 Nick 和 Salim 提供了解决方案,但我没有解决问题。
编辑:已解决!在实施 Nick 的解决方案后,我只需要添加 GROUP BY cntrs_reper.gm_company_no、cntrs_reper.date。 就是这样。对于一个表中的每一行,都具有最高的日期和时间!!谢谢大家。
编辑。如果这可以帮助这是完整的查询:
SELECT cntrs_gm.gm_company_no AS company_c_g,
bns_gms.ded_bns AS ded_bns_gms,
bns_gms.no_ded_bns AS no_ded_bns_gms,
bns_gms.wag_ded_bns AS wag_ded_bns_gms,
cntrs_gm.cur_credit AS cur_credit_c_g,
cntrs_gm.cdrop AS cdrop_c_g,
cntrs_gm.total_jp AS total_jp_c_g,
cntrs_gm.games AS games_c_g,
cntrs_gm.wgames AS wgames_c_g,
cntrs_gm.doors AS doors_c_g,
cntrs_gm.power AS power_c_g,
cntrs_gm.total_in AS total_in_c_g,
cntrs_gm.total_out AS total_out_c_g,
cntrs_gm.total_acc AS total_acc_c_g,
cntrs_gm.total_bet AS total_bet_c_g,
cntrs_gm.total_win AS total_win_c_g,
cntrs_gm.total_bonus AS total_bonus_c_g,
cntrs_gm.date AS date_c_g,
cntrs_reper.gm_company_no AS company_reper,
bns_reper.ded_bns AS ded_bns_reper,
bns_reper.no_ded_bns AS no_ded_bns_reper,
bns_reper.wag_ded_bns AS wag_ded_bns_reper,
cntrs_reper.cur_credit AS cur_credit_reper,
cntrs_reper.cdrop AS cdrop_reper,
cntrs_reper.total_jp AS total_jp_reper,
cntrs_reper.games AS games_reper,
cntrs_reper.wgames AS wgames_reper,
cntrs_reper.doors AS doors_reper,
cntrs_reper.power AS power_reper,
cntrs_reper.total_in AS total_in_reper,
cntrs_reper.total_out AS total_out_reper,
cntrs_reper.total_acc AS total_acc_reper,
cntrs_reper.total_bet AS total_bet_reper,
cntrs_reper.total_win AS total_win_reper,
cntrs_reper.total_bonus AS total_bonus_reper,
cntrs_reper.date AS date_reper,
cntrs_reper.time AS time_reper,
bns_reper.time AS time_c_g,
gms_cfg.gm_no AS machine_id,
gms_cfg.denom_cin AS machine_cin
FROM bns_gms
INNER JOIN cntrs_gm
ON bns_gms.gm_company_no = cntrs_gm.gm_company_no AND bns_gms.date = cntrs_gm.date
INNER JOIN bns_reper
ON cntrs_gm.gm_company_no = bns_reper.gm_company_no
INNER JOIN cntrs_reper
ON bns_reper.gm_company_no = cntrs_reper.gm_company_no AND bns_reper.date = cntrs_reper.date
INNER JOIN gms_cfg
ON cntrs_reper.gm_company_no = gms_cfg.gm_no
WHERE bns_reper.date IN(
SELECT MAX(DATE(bns_reper.date)) FROM bns_reper WHERE bns_reper.time IN(
SELECT MAX(TIME(bns_reper.time)) FROM bns_reper
)
)
AND cntrs_reper.date IN(
SELECT MAX(DATE(cntrs_reper.date)) FROM cntrs_reper WHERE cntrs_reper.time IN(
SELECT MAX(TIME(cntrs_reper.time)) FROM cntrs_reper
)
)
ORDER BY cntrs_gm.gm_company_no
数据库示例
【问题讨论】:
-
尝试使用
MAX(DATE(table1.date))和MAX(TIME(table2.date))。第一个将返回 MAX 日期,第二个 - MAX 时间。 -
感谢回复,但又返回多行。
-
join the rest on some other value是什么意思?在同一个查询中加入其他表?找到MAX日期和MAX时间的table1、table2与其他3张表有什么关系? -
其他 3 个表没有时间列。他们总是每天只有一次进入,并且一直在更新。我加入他们的日期和一些身份证号码。是的,我将它们加入到同一个查询中。如果需要,我将编辑带有完整查询的问题?
-
您能否提供表中数据的示例?测试连接或比较结果会很有帮助。
标签: mysql