oracle查询表中所有字段,根据SECID分组,然后租出组内AUDIT_VERSION最大的一条
时间: 2023-09-20 08:10:06 浏览: 42
可以使用以下的 Oracle SQL 语句查询表中所有字段,根据 SECID 分组,然后筛选出每组中 AUDIT_VERSION 最大的一条记录:
```
SELECT *
FROM (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY SECID ORDER BY AUDIT_VERSION DESC) AS rn
FROM your_table t
)
WHERE rn = 1;
```
解释一下这个 SQL 查询的过程:
1. 首先,使用子查询从原始表中选择所有字段,并通过 `ROW_NUMBER()` 函数为每个 SECID 分组内的记录编号,编号的顺序按照 AUDIT_VERSION 降序排列。
2. 接着,外层查询筛选出编号为 1 的记录,这些记录对应每个分组内 AUDIT_VERSION 最大的记录。
注意,需要将 `your_table` 替换为实际的表名。
相关问题
目标表字段为bid,asset_code,isin_code,bond_full_name 原表1的表名为dmsec,表字段为sec,type 原表2的表名为dmsecidnt,表字段为IDENTIFIER,audit_version,SECID,IDENTIFIERTYPE 需求为写出查询oracle的sql, dmsec左连接dmsecidnt,连表条件为dmsec.sec = dmsecidnt.SECID, dmsec.sec映射到目标表的asset_code, 查出dmsecidnt.IDENTIFIERTYPE='ISIN'并且audit_version最大时的IDENTIFIER映射到isin_code, 查出dmsecidnt.IDENTIFIERTYPE='LNGNM'并且audit_version最大时的IDENTIFIER映射到bond_full_name, bid赋值uuid
以下是查询oracle的sql语句:
```
SELECT
SYS_GUID() AS bid,
dmsec.asset_code,
MAX(CASE WHEN dmsecidnt.IDENTIFIERTYPE='ISIN' THEN dmsecidnt.IDENTIFIER END) AS isin_code,
MAX(CASE WHEN dmsecidnt.IDENTIFIERTYPE='LNGNM' THEN dmsecidnt.IDENTIFIER END) AS bond_full_name
FROM
dmsec
LEFT JOIN
dmsecidnt ON dmsec.sec = dmsecidnt.SECID
WHERE
dmsecidnt.IDENTIFIERTYPE IN ('ISIN', 'LNGNM')
GROUP BY
dmsec.asset_code;
```
解析:
1. 通过 `SYS_GUID()` 函数生成一个唯一标识符,赋值给 `bid` 字段。
2. 使用 `LEFT JOIN` 连接 `dmsec` 和 `dmsecidnt` 表,并根据 `dmsec.sec = dmsecidnt.SECID` 进行关联。
3. 使用 `MAX()` 函数获取 `dmsecidnt.IDENTIFIER` 的最大值,同时使用 `CASE` 语句进行条件判断,将 `dmsecidnt.IDENTIFIER` 映射到 `isin_code` 或 `bond_full_name` 字段。
4. 使用 `GROUP BY` 对 `dmsec.asset_code` 进行分组,保证查询结果按照 `asset_code` 去重。
python爬虫 巨潮资讯
python爬虫巨潮资讯是通过发送网络请求获取文件标识(announcementId),然后根据这个标识获取pdf文件的网址,并将pdf文件保存到指定文件夹中。具体步骤如下:
1. 首先,需要导入requests和time模块。
2. 定义请求数据的接口url,并设置请求参数param。同时,伪装User-Agent头部信息。
3. 发送POST请求获取数据列表response,并将返回的数据转换为JSON格式。
4. 遍历数据列表,获取每个公司的标识id,并保存到id_list数组中。
5. 定义获取详情数据的请求接口post_url。
6. 遍历id_list数组,依次获取每个公司的详情数据。
7. 定义请求头部信息hea,并获取当天时间。
8. 拼接请求参数data,并发送POST请求获取详细数据的JSON格式返回值last_list。
9. 从last_list中获取pdf文件的网址和文件标题,并打印出来。
10. 发送GET请求获取pdf文件内容,并将其保存到指定文件夹中。
以下是示例代码:
```python
import requests
import time
if __name__ == '__main__':
url = 'http://www.cninfo.com.cn/new/hisAnnouncement/query'
for pageNum in range(1, 3):
param = {
'pageNum': pageNum,
'pageSize': '30',
'column': 'szse',
'tabName': 'fulltext',
'plate': '',
'stock': '',
'searchkey': '',
'secid': '',
'category': '',
'trade': '',
'seDate': '2021-12-07~2022-06-07',
'sortName': '',
'sortType': '',
'isHLtitle': 'true',
}
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
id_list = []
response = requests.post(url=url, headers=head, data=param)
data_list = response.json()
for dic in data_list['announcements']:
id_list.append(dic['announcementId'])
post_url = 'http://www.cninfo.com.cn/new/announcement/bulletin_detail'
for announcementId in id_list:
hea = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
t = time.localtime()
data = {
'announceId': announcementId,
'flag': 'true',
'announceTime': time.strftime("%Y-%m-%d", t),
}
last_list = requests.post(url=post_url, headers=hea, params=data).json()
print(last_list['fileUrl'])
print(last_list['announcement']['announcementTitle'])
responsepdf = requests.get(last_list['fileUrl'])
if responsepdf.status_code == 200:
with open(r".\save\%s.pdf" % last_list['announcement']['announcementTitle'], "wb") as code:
code.write(responsepdf.content)
```