我很难根据最近的日期更新数据库中的记录,并且正在寻找一些指导.顺便说一下,我是SQL新手.
作为背景,我有一个使用SQL Express的Windows窗体应用程序,并使用ADO.NET与数据库进行交互.该应用程序旨在使用户能够跟踪员工出席必须定期参加的各种课程(例如,每6个月,每年等).例如,他们可以撤回数据以查看员工上次参加特定课程的时间,并在员工最近完成课程时更新出勤日期.
我有三个数据表:
对于任何给定的课程,员工将有一个出勤历史,即如果每年需要参加该课程,那么他们将拥有与他们在公司一样多年的记录.
我希望能够根据最近的出勤日期更新给定员工的"评论"字段和给定的课程.这是什么'正确'的SQL语法?
我尝试了很多东西(如下所示),但无法让它工作:
UPDATE AttendanceRecordsTable
SET Comments = @Comments
WHERE AttendanceRecordsTable.EmployeeID = (SELECT EmployeeDetailsTable.EmployeeID FROM EmployeeDetailsTable WHERE (EmployeeDetailsTable.LastName =@ParameterLastName AND EmployeeDetailsTable.FirstName =@ParameterFirstName)
AND AttendanceRecordsTable.CourseID = (SELECT CourseDetailsTable.CourseID FROM CourseDetailsTable WHERE CourseDetailsTable.CourseName =@CourseName))
GROUP BY MAX(AttendanceRecordsTable.LastDate)
Run Code Online (Sandbox Code Playgroud)
经过大量的谷歌搜索,我发现MAX是一个聚合函数,所以我需要使用GROUP BY.我也尝试过使用HAVING关键字但没有成功.
任何人都能指出我正确的方向吗?基于最近日期更新数据库记录的"常规"语法是什么?
我遇到的一个常见情况是在用户执行操作以通知他们成功后向用户提供通知/确认.
例如,假设用户提供反馈表单的反馈,然后单击" 提交反馈".您可能希望在执行某些验证后显示"感谢您的反馈"消息,例如他们在数据库中有有效的电子邮件.一些伪代码:
public ActionResult SubmitFeedback(string Feedback, int UserID)
{
MyDataContext db = new DataContext()
if(db.usp_HasValidEmail(UserID)) //Check user has provided a valid email
return View("Index"); //Return view and display confirmation
else
ModelState.AddModelError("InvalidEmail", "We do not hold an email record for you. Please add one below");
return View("Index);
}
Run Code Online (Sandbox Code Playgroud)
我理解如何通过使用Html.ValidationMessage等来验证条目.这很好,我通常检查无效条目,无论是在客户端使用jQuery还是在我的Action早期(即在我开始访问数据库之前)并在有无效条目时退出我的操作.
但是,所有条目都有效且您想要显示确认消息的情况如何?
选项1:拥有完全独立的视图
这似乎违反了DRY原则,通过使用全新的View(和ViewModel)来显示几乎相同的信息,期望用户通知.
选项2:视图中的条件逻辑
在这种情况下,我可以在View中有一个条件语句,用于检查SubmitFeedbackAction中传递的某些TempData是否存在.再次,伪代码:
<% if(TempData["UserNotification"] != null {%>
<div class="notification">Thanks for your Feedback!</div>
<% } %> …Run Code Online (Sandbox Code Playgroud) 我想就数据库设计提出一些建议.具体来说,请考虑以下(假设的)情景:

在这种情况下,如果员工离开公司,我还要确保从Users表中删除它们,以便他们无法再访问该软件.我可以通过实现这个ON DELETE CASCADE作为的FK关系的一部分EmployeeID中Employees和Users.
但是,我不想删除他们的详细信息,UserLog因为我有兴趣整理人们花在软件上的时间以及他们不再在公司工作这一事实并不意味着他们的用户行为不再相关.
我剩下的是一个UserLog与我的数据库中的任何其他表没有关系的表.这是一个明智的想法吗?
浏览过书籍等等/ googled online我没有遇到过任何与其他人没有任何关系的数据库模式,所以我的直觉就是说我的方法不健全......
我很感激你的指导.
我需要替换可能包含某些值的单元格中的值.假设我在A列中列出了以下值.
Trucking Inc.
New Truck Inc
ABV Trucking Inc, LLC
Run Code Online (Sandbox Code Playgroud)
我希望能够用相应的值替换以下内容.以下是包含在2列中的列表.1列是From,另一列是To字段.
From To
" Inc." ""
" Inc" ""
" Inc, " ""
" LLC" ""
Run Code Online (Sandbox Code Playgroud)
结果应该是:
Trucking
New Truck
ABV Trucking
Run Code Online (Sandbox Code Playgroud)
希望我在这里有意义.
在Visual Studio(2017)中调试(F5)我的代码时出现以下错误:
找不到ServiceLocatorImplBase.cs
阅读细节,似乎是在我的计算机上寻找以下位置的文件:
'C:\首页\克里斯\项目\ CommonServiceLocator \主\ Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs'
我没有目录'c:\ Home\Chris ...',我不知道它为什么会在那里看.
我怎样才能解决这个问题?
出于自我提升/拓宽视野的原因,我决定使用K&R'C编程语言书来学习C的一些基础知识.
我一直在跟随练习,使用Bloodhsed DEV C++ 4.9.9.2作为我的IDE.
我遇到了以下练习 - 计算输入中的字符:
main()
{
double nc;
for(nc = 0; getchar() != EOF; ++nc);
printf("&.0f\n", nc);
}
Run Code Online (Sandbox Code Playgroud)
此代码符合并运行,没有错误.
但是,当我在控制台窗口中输入一个字符串并按下回车时,我没有得到任何输出,即显示字符串中有多少字符的数字.例如,如果我在控制台窗口中键入'test',我希望4显示为输出.
我确定问题只是我设置IDE的方式?或者我错过了一些更基本的东西?
任何帮助非常感谢.来自VB背景,我真的很兴奋学习像C这样的不同语言,并掌握指针!
编辑
这里也给出了我的问题的相关答案,非常有用: 为什么getchar()不能在控制台上识别返回EOF?
我想计算一个单元格中的所有特殊字符(!%_*?+ - ,).
例如:
使用这个公式,=LEN(D2)-LEN(SUBSTITUTE(D2;"!";""))我只能计算一个字符,但我需要计算单个单元格中的多个字符...有没有办法如何调整这个?
谢谢您的帮助!
我有一个包含250个帐户的Excel电子表格,每个帐户都有一堆交易记录.我需要提取利率变化的日期.有250000多条记录.
它看起来像这样:
ACCT CEL-INT-RATE LTD-INT-BILL FileDate
0006365290140074793 84.00 1479.43 20131007
0006365290140074793 84.00 1479.43 20131012
0006365290140074793 84.00 1479.43 20131014
0006365290140074793 84.00 2598.55 20131107 <---
0006365290140074793 21.00 2598.55 20131111
0006365290140074793 21.00 2598.55 20131129
0006365290140074793 21.00 2598.55 20131204
Run Code Online (Sandbox Code Playgroud)
我需要日期'20131107',我用<---标记,其中利率最后为84.00,然后更改为21.00,对于该帐户0006365290140074793
任何人都可以帮助这个公式.
提前致谢
我有一个数据库,可以记录员工参加课程的时间以及下次参加课程的时间(课程往往是年度课程).
例如,以下员工于2010年1月1日参加了"1"课程,并且由于课程是年度课程,将于2011年1月1日参加.由于今天是2010年5月20日,课程状态显示为"完成",即他们已经完成了课程,直到明年才需要再做一遍:
EmployeeID CourseID AttendanceDate DueDate Status
123456 1 01/01/2010 01/01/2011 Complete
Run Code Online (Sandbox Code Playgroud)
在DueDate我更新员工的记录时,我在SQL中计算这一点,例如DueDate = AttendanceDate + CourseFrequency(我从一个单独的表中提取课程频率).
在我的基于Web的应用程序(asp.net mvc)中,我为所有员工提取这些数据,并以类似网格的格式显示,供人力资源经理审核.这使得人力资源部门可以确定谁需要参加课程.
我的问题如下.
以上面的例子为例,假设今天是2011年1月2日.在这种情况下,员工123456现在已经过期了,我想设置Status为Incomplete,以便HR经理可以看到他们需要采取行动,即让员工参与课程.
我可以在数据库中构建一个触发器,在一夜之间运行,Status根据当前日期更新所有员工的字段.从我所看到的,我将需要使用游标循环每一行来修改状态,这被认为是不好的做法/低效或至少要避免的事情,如果你可以???
或者,Status在我从数据库中撤回数据之后,在我将其显示在屏幕上之前,我可以在我的C#代码中计算.这个问题是Status数据库中的内容不一定与屏幕上显示的内容相匹配,这对我来说是完全错误的.
有没有人对这种问题的最佳实践方法有任何建议?
它有帮助,如果我使用游标我怀疑我会在任何给定时间循环超过1000条记录.也许这个数量很小,使用游标是可以的吗?
excel ×3
sql-server ×2
c ×1
cursor ×1
jquery ×1
spreadsheet ×1
sql ×1
structuremap ×1
t-sql ×1
vba ×1