仓酷云

标题: MSSQL教程之跟日期有关的两条典范SQL语句 [打印本页]

作者: 灵魂腐蚀    时间: 2015-1-16 22:37
标题: MSSQL教程之跟日期有关的两条典范SQL语句
这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多,你应该尝试找出其原因!见G.1调试一个MySQL服务器。语句
1.用一条语句得出某日期地点月份的最年夜天数?

SELECTDAY(DATEADD(dd,-DAY(2004-02-13),DATEADD(mm,1,2004-02-13)))ASDayNumber




2.少纪录酿成多笔记录成绩

有表tbl
日期支出付出
2004-02-1100:00:006045
2004-03-0100:00:006045
2004-03-0200:00:004050
2004-03-0500:00:005040

/*
测试数据:
CreateTabletbl([日期]smalldatetime,[支出]int,[付出]int)

InsertIntotbl
SELECT2004-02-11,60,45
unionSELECT2004-03-01,60,45
unionSELECT2004-03-02,40,50
unionSELECT2004-03-05,50,40
*/

要失掉的了局:
日期支出付出余额
2004-02-0100:00:00NULLNULLNULL
2004-02-0200:00:00NULLNULLNULL
2004-02-0300:00:00NULLNULLNULL
2004-02-0400:00:00NULLNULLNULL
2004-02-0500:00:00NULLNULLNULL
2004-02-0600:00:00NULLNULLNULL
2004-02-0700:00:00NULLNULLNULL
2004-02-0800:00:00NULLNULLNULL
2004-02-0900:00:00NULLNULLNULL
2004-02-1000:00:00NULLNULLNULL
2004-02-1100:00:00604515
2004-02-1200:00:00NULLNULL15
2004-02-1300:00:00NULLNULL15
2004-02-1400:00:00NULLNULL15
2004-02-1500:00:00NULLNULL15
2004-02-1600:00:00NULLNULL15
2004-02-1700:00:00NULLNULL15
2004-02-1800:00:00NULLNULL15
2004-02-1900:00:00NULLNULL15
2004-02-2000:00:00NULLNULL15
2004-02-2100:00:00NULLNULL15
2004-02-2200:00:00NULLNULL15
2004-02-2300:00:00NULLNULL15
2004-02-2400:00:00NULLNULL15
2004-02-2500:00:00NULLNULL15
2004-02-2600:00:00NULLNULL15
2004-02-2700:00:00NULLNULL15
2004-02-2800:00:00NULLNULL15
2004-02-2900:00:00NULLNULL15
2004-03-0100:00:00604530
2004-03-0200:00:00405020
2004-03-0300:00:00NULLNULL20
2004-03-0400:00:00NULLNULL20
2004-03-0500:00:00504030
2004-03-0600:00:00NULLNULL30
2004-03-0700:00:00NULLNULL30
2004-03-0800:00:00NULLNULL30
2004-03-0900:00:00NULLNULL30
2004-03-1000:00:00NULLNULL30
2004-03-1100:00:00NULLNULL30
2004-03-1200:00:00NULLNULL30
2004-03-1300:00:00NULLNULL30
2004-03-1400:00:00NULLNULL30
2004-03-1500:00:00NULLNULL30
2004-03-1600:00:00NULLNULL30
2004-03-1700:00:00NULLNULL30
2004-03-1800:00:00NULLNULL30
2004-03-1900:00:00NULLNULL30
2004-03-2000:00:00NULLNULL30
2004-03-2100:00:00NULLNULL30
2004-03-2200:00:00NULLNULL30
2004-03-2300:00:00NULLNULL30
2004-03-2400:00:00NULLNULL30
2004-03-2500:00:00NULLNULL30
2004-03-2600:00:00NULLNULL30
2004-03-2700:00:00NULLNULL30
2004-03-2800:00:00NULLNULL30
2004-03-2900:00:00NULLNULL30
2004-03-3000:00:00NULLNULL30
2004-03-3100:00:00NULLNULL30

谜底:
SELECTY.[日期],tbl.[支出],tbl.[付出],(
SELECTSUM(ISNULL(tbl.[支出],0)-ISNULL(tbl.[付出],0))FROMtblWHERE[日期]<=Y.[日期])AS[余额]
FROMtblRIGHTJOIN(
SELECTDATEADD(dd,N.i,DATEADD(dd,1-DAY(m.MinDay),m.MinDay))AS[日期]
FROM(
SELECT0ASi
UNIONALLSELECT1
UNIONALLSELECT2
UNIONALLSELECT3
UNIONALLSELECT4
UNIONALLSELECT5
UNIONALLSELECT6
UNIONALLSELECT7
UNIONALLSELECT8
UNIONALLSELECT9
UNIONALLSELECT10
UNIONALLSELECT11
UNIONALLSELECT12
UNIONALLSELECT13
UNIONALLSELECT14
UNIONALLSELECT15
UNIONALLSELECT16
UNIONALLSELECT17
UNIONALLSELECT18
UNIONALLSELECT19
UNIONALLSELECT20
UNIONALLSELECT21
UNIONALLSELECT22
UNIONALLSELECT23
UNIONALLSELECT24
UNIONALLSELECT25
UNIONALLSELECT26
UNIONALLSELECT27
UNIONALLSELECT28
UNIONALLSELECT29
UNIONALLSELECT30
UNIONALLSELECT31
)N,
(
SELECTMIN(日期)ASMinDay
FROMtbl
GROUPBYDATEDIFF(month,0,日期)
)M
WHEREDATEDIFF(mm,DATEADD(dd,N.i,DATEADD(dd,1-DAY(m.MinDay),m.MinDay)),M.MinDay)=0)ASY
ONtbl.[日期]=Y.日期
MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务
作者: 乐观    时间: 2015-1-19 19:16
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
作者: 分手快乐    时间: 2015-1-26 23:56
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
作者: 爱飞    时间: 2015-2-4 23:15
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
作者: 因胸联盟    时间: 2015-2-10 22:48
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
作者: 若天明    时间: 2015-3-1 16:59
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
作者: 飘飘悠悠    时间: 2015-3-10 21:21
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
作者: 愤怒的大鸟    时间: 2015-3-17 10:12
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2