我尝试过一些事情,但最终让自己感到困惑。
我要做的是从表格中找到最新的记录,然后在特定日期之后加入第一个记录。
一个例子可能是
id | acct_no | created_at | some_other_column
1 | A0001 | 2017-05-21 00:00:00 | x
2 | A0001 | 2017-05-22 00:00:00 | y
3 | A0001 | 2017-05-22 00:00:00 | z
理想情况下,我希望找到按acct_no
排序的每个created_at DESC
的最新记录,以便按唯一帐号对结果进行分组,因此从上面的记录中可以看出3
{1}},但显然会有多个不同的帐号,其中包含不同日期的记录。
然后,我想要达到的目的是加入同一张桌子,并在特定日期之后找到具有相同帐号的第一张记录。
例如,对于1
acct_no
之后加入A0001
之后的查询,将返回记录2017-05-21 00:00:00
,因为它是等于此之后的第一个结果日期,因此按created_at ASC AND created_at >= "2017-05-21 00:00:00"
排序(可能AND id != latest.id
。
看起来很直接,但我无法让它发挥作用。
在丢弃多个不同的查询后,我只有最近的尝试。
这里我试图解决第一部分,即选择最新的每个帐号:
SELECT latest.* FROM my_table latest
JOIN (SELECT acct_no, MAX(created_at) FROM my_table GROUP
BY acct_no) latest2
ON latest.acct_no = latest2.acct_no
但仍会返回所有行,而不是最新的行。
我确实在子查询中使用了一个连接,但在完成之前我花了很长时间才运行它,但我在acct_no
和created_at
上有索引但是我也遇到了select中的列不在group by中的其他问题。我知道这可以关闭,但我正在尝试找到一种方法来执行不需要的查询。
答案 0 :(得分:1)
尝试对初始查询进行一些编辑:
{{1}}
答案 1 :(得分:0)
您需要获取创建最大日期的ID。
SELECT latest.* FROM my_table latest
join (SELECT max(id) as id FROM my_table GROUP
BY acct_no where created_at = MAX(created_at)) latest2
ON latest.id = latest2.id
答案 2 :(得分:0)
尝试不同的方法。不确定性能影响。但是希望避免自我加入和分组会在性能方面更好。
var cloud = "<img style='position: absolute;right: 0;bottom: 0;' src='"+ Cloud.one + "'>";