KDB优雅地仅选择列上具有最大值的行

Kai*_*Kai 3 kdb

我有这个股票价格表(这里是简化版):

+----------+--------+-------+
|   Time   | Ticker | Price |
+----------+--------+-------+
| 10:00:00 | A      |     5 |
| 10:00:01 | A      |     6 |
| 10:00:00 | B      |     3 |
+----------+--------+-------+
Run Code Online (Sandbox Code Playgroud)

我想通过Ticker选择具有最大时间的行组,例如

+----------+--------+-------+
|   Time   | Ticker | Price |
+----------+--------+-------+
| 10:00:01 | A      |     6 |
| 10:00:00 | B      |     3 |
+----------+--------+-------+
Run Code Online (Sandbox Code Playgroud)

我知道如何在SQL中做到这一点,类似的问题可以在这里找到,但我不知道如何在KDB中优雅地做到这一点.

我有一个选择两次的解决方案:

select first Time, first Ticker, first Price by Ticker from (`Time xdesc select Time, Ticker, Price from table where date=2018.06.21)
Run Code Online (Sandbox Code Playgroud)

有更清洁的解决方案吗?

ter*_*nch 9

每当你进行涉及a的双重选择时by,这是一个好的迹象,你可以改为使用fby

q)t:([]time:10:00:00 10:00:01 10:00:00;ticker:`A`A`B;price:5 6 3)
q)
q)select from t where time=(max;time) fby ticker
time     ticker price
---------------------
10:00:01 A      6
10:00:00 B      3
Run Code Online (Sandbox Code Playgroud)

Kdb还提供了一种快捷方式,可以在select by没有指定列的情况下随时获取最后一条记录,但这种方法不是一般的或可自定义的

q)select by ticker from t
ticker| time     price
------| --------------
A     | 10:00:01 6
B     | 10:00:00 3
Run Code Online (Sandbox Code Playgroud)