1. 我有一张表如下:
AttTime(datetime) Emp(nvarchar) Dept(nvarchar)
2008-08-02 6:45 zhangsan A
2008-08-02 18:20 zhangsan A
2008-08-02 11:22 zhangsan A
2008-08-02 18:20 zhangsan A
2008-08-08 7:15 zhangsan A
2008-08-08 19:12 zhangsan A
2008-08-01 6:41 ww A
2008-08-01 8:41 ww A
2008-08-01 17:20 ww A
2008-08-06 7:11 ww A
2008-08-06 18:12 ww A
2008-08-04 8:13 lisi B
2.想要得到数据如下:
即得到指定Dept(A)下的所有Emp(zhangsan,ww)的AttTime记录,并按每个人分组显示,求出每个人每天的最大时间和最小时间,
没有记录的日期用空的补全。
AttDate minAttTime maxAttTime Emp Dept
<chsdate w:st="on" year="2008" month="8" day="2" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-02</span></chsdate> 6:45 18:20 zhangsan A
<chsdate w:st="on" year="2008" month="8" day="3" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-03</span></chsdate> null null zhangsan A
<chsdate w:st="on" year="2008" month="8" day="4" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-04</span></chsdate> null null zhangsan A
<chsdate w:st="on" year="2008" month="8" day="5" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-05</span></chsdate> null null zhangsan A
<chsdate w:st="on" year="2008" month="8" day="6" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-06</span></chsdate> null null zhangsan A
<chsdate w:st="on" year="2008" month="8" day="7" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-07</span></chsdate> null null zhangsan A
<chsdate w:st="on" year="2008" month="8" day="8" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-08</span></chsdate> 7:15 19:12 zhangsan A
<chsdate w:st="on" year="2008" month="8" day="1" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-01</span></chsdate> 6:41 17:20 ww A
<chsdate w:st="on" year="2008" month="8" day="2" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-02</span></chsdate> null null ww A
<chsdate w:st="on" year="2008" month="8" day="3" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-03</span></chsdate> null null ww A
<chsdate w:st="on" year="2008" month="8" day="4" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-04</span></chsdate> null null ww A
<chsdate w:st="on" year="2008" month="8" day="5" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-05</span></chsdate> null null ww A
<chsdate w:st="on" year="2008" month="8" day="6" islunardate="False" isrocdate="False"><span lang="EN-US">2008-08-06</span></chsdate> 7:11 18:12 ww A
3.答案如下:
--> 生成测试数据: @AttRecords
CREATE TABLE AttRecords(AttTime DATETIME,Emp VARCHAR(8),Dept VARCHAR(1))
INSERT INTO AttRecords
SELECT '2008-08-02 6:45','zhangsan','A' UNION ALL
SELECT '2008-08-02 18:20','zhangsan','A' UNION ALL
SELECT '2008-08-02 11:22','zhangsan','A' UNION ALL
SELECT '2008-08-02 18:20','zhangsan','A' UNION ALL
SELECT '2008-08-08 7:15','zhangsan','A' UNION ALL
SELECT '2008-08-08 19:12','zhangsan','A' UNION ALL
SELECT '2008-08-01 6:41','ww','A' UNION ALL
SELECT '2008-08-01 8:41','ww','A' UNION ALL
SELECT '2008-08-01 17:20','ww','A' UNION ALL
SELECT '2008-08-06 7:11','ww','A' UNION ALL
SELECT '2008-08-06 18:12','ww','A' UNION ALL
SELECT '2008-08-04 8:13','lisi','B'
--SQL查询如下:
--在实际中.应该在数据库中建立一个序号表来代替master.dbo.spt_values
GO
CREATE VIEW dbo.v_Test
AS
SELECT
A.Emp,A.Dept,
CONVERT(VARCHAR(10),A.AttTime,120) AS AttTime,
CONVERT(VARCHAR(10),MIN(B.AttTime),108) AS MinAttTime,
CONVERT(VARCHAR(10),MAX(B.AttTime),108) AS MaxAttTime
FROM (SELECT A.ID,B.Dept,B.Emp,DATEADD(day,A.ID,B.MinAttTime) AS AttTime
FROM (SELECT number AS ID FROM master.dbo.spt_values WHERE type = 'p') AS A
CROSS JOIN (SELECT Dept,Emp,MIN(AttTime) AS MinAttTime,MAX(AttTime) AS MaxATtTime
FROM AttRecords WHERE Dept = 'A' GROUP BY Dept,Emp ) AS B
WHERE DATEADD(day,A.ID,B.MinAttTime) <= B.MaxAttTime) AS A
LEFT JOIN <place w:st="on"><city w:st="on">AttRecords</city><state w:st="on"><span style="color: blue">AS</span></state></place> B
ON DATEDIFF(day,B.AttTime,A.AttTime) = 0 AND A.Emp = B.Emp AND A.Dept = B.Dept
GROUP BY A.Dept,A.Emp,CONVERT(VARCHAR(10),A.AttTime,120);
GO
SELECT * FROM dbo.v_Test ORDER BY Dept,Emp,AttTime;
GO
DROP VIEW dbo.v_Test;
DROP TABLE AttRecords;
问下这个查询如果用linqtosql直接对AttRecords查询如何才能得到我想要的数据呢?
分享到:
相关推荐
- `DefaultView.ToTable(true, "RECORDDT")`用于根据`RECORDDT`字段对数据进行排序,并创建一个新的数据表`dtS`。 - 通过循环遍历`dtS`中的每一行,并使用`Select()`方法筛选出符合日期条件的数据行。 - 对筛选出的...
在Oracle 10g中,我们还可以使用Sql*Plus工具来执行这些SQL语句,这是一个命令行接口,提供了丰富的交互式查询和脚本执行功能。通过熟练掌握这些操作,你可以更高效地管理和分析数据库中的数据。 总的来说,理解并...
根据提供的文件信息,本文将详细解释如何在SQL中实现按月份进行数据分组,并通过一个具体实例来加深理解。此方法对于需要分析时间序列数据、尤其是销售数据分析的应用场景非常有用。 ### SQL按月分组的核心概念 ##...
数据库索引设计的一个重要方面是理解查询的执行计划和原理,以及如何针对这些信息进行深度的SQL调优。比如,考虑索引的选择性、索引覆盖以及如何避免查询中的全表扫描等。 对于更新操作,如INSERT、UPDATE和DELETE...
`GROUP BY`语句允许我们根据一个或多个列对数据进行分组,然后使用聚合函数如`COUNT`、`SUM`、`AVG`、`MIN`和`MAX`来计算每组的总和、平均值等信息。例如,`SELECT department, COUNT(*) FROM employees GROUP BY ...
在这个“SQL分组排序去重复的小实例”中,我们将深入理解如何结合这三个概念来优化数据检索。 首先,我们要明白`GROUP BY`语句的作用。在SQL中,`GROUP BY`用于将数据表中的数据根据一个或多个列进行分组。当你想对...
在压缩包文件"sql_ok"中,可能包含了这样一个工具的安装程序或使用教程,可以帮助你开始探索和利用SQL语句生成器的便利性。 总之,SQL语句生成器是数据库开发者的得力助手,它能简化SQL编写,提高代码质量,降低...
最后一份文件"SQL争霸赛.sql"可能是练习用的数据库脚本,参赛者可以运行这些脚本来创建一个测试环境,以便在其中试验他们的SQL查询。这个环境可以帮助他们验证解决方案的正确性,并且可以在不改变实际比赛数据的情况...
除了以上介绍的时间相关查询外,还可以执行其他常见的SQL操作,比如分组、排序等。例如: 1. **统计每个产品ID的商品数量**: ```sql SELECT ysg_pid, SUM(ysg_count) FROM ys_tb_goodsorder GROUP BY ysg_pid ...
2. GROUP BY:用于将数据按一个或多个列进行分组,常与聚合函数一起使用。例如,`SELECT column1, COUNT(*) FROM table GROUP BY column1`按column1分组并计数。 3. HAVING:与WHERE类似,但用于筛选GROUP BY后的...
│ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续的5个字符相同.sql │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符...
1. **窗口函数**:添加了窗口函数,如ROW_NUMBER(), RANK(), DENSE_RANK()等,使得在分组数据时可以进行更复杂的数据分析和排序。 2. **游标改进**:改进了游标的处理,支持在存储过程中更灵活地控制游标的行为。 3....
本文将深入探讨Mysql中`GROUP BY`的分组排序功能,并通过一个实际的例子来说明其工作原理。 首先,`GROUP BY`的基本用法是在查询中对特定列进行分组,以便对每个分组应用聚合函数,如`COUNT()`, `SUM()`, `AVG()`, ...
本教程旨在提供一个简洁明了的SQL学习指南,帮助初学者快速掌握基本概念和常用命令。 一、SQL概述 SQL起源于1970年代,由IBM的研究员开发,其设计目标是为了更方便地操作关系型数据库。现在,SQL已经成为全球数据...
包括基本的查询构造、数据过滤、排序、分组、聚合函数以及如何处理日期和时间等。 学习这些官方文档可以帮助开发者深入理解Oracle SQL的全貌,有效编写高效的查询,设计和实施复杂的数据库解决方案。无论是初学者...
- **使用视图**:视图可以看作是一个虚拟表,它保存了SQL查询的结果,便于简化复杂的查询操作。 - **列的重命名**:通过AS关键字重命名视图中的列名,使其更具可读性。 - **SQL对视图的处理过程**:解释了SQL引擎...
9. **视图(View)**:如果`payday.sql`创建了一个视图,那可能是为了简化复杂的查询,或者为用户提供一个定制的查看工资数据的界面。 10. **索引优化**:考虑到效率,可能在与`payday`相关的列上创建了索引,以...
4. 排序与分组:ORDER BY和GROUP BY子句分别用于排序结果和按特定列进行分组。可能的作业会要求对查询结果进行升序或降序排列,或者计算每个组的总和、平均值等统计信息。 5. 聚合函数:SUM、AVG、MAX和MIN是常见的...
视图是从一个或多个表中选择出数据的虚拟表,它不存储实际数据,但可以提供简化查询的接口。索引用于加速数据检索,通过创建唯一或非唯一的索引,可以显著提升查询速度。 `www.pudn.com.txt`和`good-ebook`可能是...
SQL数据类型是SQL数据库语言的另一个重要组成部分,包括数值类型、字符类型、日期和时间类型等。本书第三章介绍了SQL中的各种数据类型,包括数值类型、字符类型、日期和时间类型等。还讲解了各种运算符和函数,如...