我在SQL数据库中创建了这个表;
y = convert_pandas(data);
showcols(y)
9147×12 DataFrames.DataFrame
│ Col # │ Name │ Eltype │ Missing │
├───────┼─────────────┼─────────┼─────────┤
│ 1 │ Open │ Float64 │ 0 │
│ 2 │ High │ Float64 │ 0 │
│ 3 │ Low │ Float64 │ 0 │
│ 4 │ Close │ Float64 │ 0 │
│ 5 │ Volume │ Float64 │ 0 │
│ 6 │ Ex-Dividend │ Float64 │ 0 │
│ 7 │ Split Ratio │ Float64 │ 0 │
│ 8 │ Adj. Open │ Float64 │ 0 │
│ 9 │ Adj. High │ Float64 │ 0 │
│ 10 │ Adj. Low │ Float64 │ 0 │
│ 11 │ Adj. Close │ Float64 │ 0 │
│ 12 │ Adj. Volume │ Float64 │ 0 │
我需要通过reg_no对此进行分组,并且仅显示最新的付款。所以,最终结果应该是这样的。
index Reg_No Payment Payday
1 S001 100 2017/01/01
2 S001 500 2017/02/01
3 S002 400 2017/01/01
4 S002 1000 2017/11/01
如何为此编写SQL查询。
答案 0 :(得分:3)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,reg_no CHAR(4) NOT NULL
,payment INT NOT NULL
,payday DATE NOT NULL
);
INSERT INTO my_table VALUES
(1,'S001',100,'2017/01/01'),
(2,'S001',500,'2017/02/01'),
(3,'S002',400,'2017/01/01'),
(4,'S002',1000,'2017/11/01');
SELECT x.*
FROM my_table x
JOIN
( SELECT reg_no
, MAX(payday) payday
FROM my_table
GROUP
BY reg_no
) y
ON y.reg_no = x.reg_no
AND y.payday = x.payday;
+----+--------+---------+------------+
| id | reg_no | payment | payday |
+----+--------+---------+------------+
| 2 | S001 | 500 | 2017-02-01 |
| 4 | S002 | 1000 | 2017-11-01 |
+----+--------+---------+------------+
2 rows in set (0.01 sec)
答案 1 :(得分:0)
SELECT * FROM table group by Reg_No having max(Payday)
Payday
必须是日期类型,否则请使用格式函数转换为日期
答案 2 :(得分:-1)
是日期格式下的Payday列数据格式还是只是varchar?
试试这段代码
SELECT * FROM表其中(SELECT MAX(STR_TO_DATE(发薪日,'%m-%d-%Y')))组按Reg_No