在sqlsever中t_bd_material表其中如何根据FNUMBER分组去取每一组中的FAPPROVEDATE最大的那条数据
时间: 2024-10-23 19:10:32 浏览: 21
在SQL Server中,你可以使用`GROUP BY`和`MAX()`函数结合子查询或者窗口函数`ROW_NUMBER()`来获取每个FNUMBER下的最大FAPPROVEDATE。这里是一个基本的示例:
```sql
SELECT FNUMBER, MAX(FAPPROVEDATE) as LatestApprovedDate
FROM t_bd_material
GROUP BY FNUMBER
ORDER BY FNUMBER;
```
这将返回每个FNUMBER对应的最大FAPPROVEDATE。如果你想只取每个FNUMBER中FAPPROVEDATE最大的那一条记录,可以考虑使用窗口函数,如下所示:
```sql
WITH CTE AS (
SELECT FNUMBER, FAPPROVEDATE,
ROW_NUMBER() OVER (PARTITION BY FNUMBER ORDER BY FAPPROVEDATE DESC) as RN
FROM t_bd_material
)
SELECT FNUMBER, FAPPROVEDATE
FROM CTE
WHERE RN = 1;
```
这个查询首先按FNUMBER分区并按FAPPROVEDATE降序排序,然后在每个分区中选择行号为1的数据,即FAPPROVEDATE最大的记录。
相关问题
SELECT FNumber, ZNumber,ZName FROM kingdee_bom_view如何在sqlsever里把FNumber相同的ZNumber,ZName放到一个集合里面
在SQL Server中,如果你想将具有相同`FNumber`的`ZNumber`和`ZName`放在一起形成一个集合,你可以使用`GROUP BY`和`SELECT`语句结合子查询或者`WITH`语句创建临时表。这里有一个示例:
```sql
; WITH CTE AS (
SELECT FNumber, ZNumber, ZName,
ROW_NUMBER() OVER (PARTITION BY FNumber ORDER BY ZNumber) AS RowNum
FROM kingdee_bom_view
)
SELECT FNumber, GROUP_CONCAT(ZNumber SEPARATOR ', ') AS ZNumberList,
GROUP_CONCAT(ZName SEPARATOR ' & ') AS ZNameList
FROM CTE
WHERE RowNum = 1
GROUP BY FNumber;
```
这个查询首先通过窗口函数`ROW_NUMBER()`对每个`FNumber`下的`ZNumber`和`ZName`进行排序,并给每一行分配一个行序号。然后`WHERE`子句只选择每组的第一个元素(`RowNum = 1`),最后使用`GROUP_CONCAT`函数合并每个`FNumber`的所有`ZNumber`和`ZName`。
SQL sever 往这个tpt_data_jingdian表中插入数据怎么写
假设tpt_data_jingdian表中有以下列:
- id (int)
- name (nvarchar(50))
- description (nvarchar(max))
- image_url (nvarchar(max))
可以使用以下SQL语句向tpt_data_jingdian表中插入一条数据:
```sql
INSERT INTO tpt_data_jingdian (id, name, description, image_url)
VALUES (1, '故宫', '故宫是中国明清两代的皇宫,位于北京市中心的中轴线上,占地面积约72万平方米。', 'https://example.com/gugong.jpg');
```
这个语句会在tpt_data_jingdian表中插入一个新的行,其中id为1,name为“故宫”,description为“故宫是中国明清两代的皇宫,位于北京市中心的中轴线上,占地面积约72万平方米。”,image_url为“https://example.com/gugong.jpg”。
阅读全文