我在MSSQL中有以下查询
SELECT TOP 50 CustomerID FROM Ratings
WHERE CustomerID != 915
AND MovieID IN (SELECT DISTINCT MovieID FROM Ratings WHERE CustomerID = 915)
GROUP BY CustomerID
ORDER BY count(*) DESC
Run Code Online (Sandbox Code Playgroud)
它超级快.当我尝试在这样的子查询中使用它时.
SELECT * FROM Ratings
WHERE MovieID = 1 AND
CustomerID IN (SELECT TOP 50 CustomerID FROM Ratings
WHERE CustomerID != 915
AND MovieID IN (SELECT DISTINCT MovieID FROM Ratings WHERE CustomerID = 915)
GROUP BY CustomerID
ORDER BY count(*) DESC)
Run Code Online (Sandbox Code Playgroud)
关于为什么这么慢以及如何加快速度的想法?我的主键是(MovieID-CustomerID),我在CustomerID上添加了一个索引
我们使用的是一个以C/Unix格式存储日期的旧应用程序.C时间基本上是自1970年1月1日以来的秒数.日期在SQL Server数据库中存储为整数.我正在为使用这些日期的报告撰写视图.
到目前为止,我正在从UNIX时间转换为本机日期时间:
DateAdd(s,3600+unix_time,'1/1/1970')
Run Code Online (Sandbox Code Playgroud)
3600将从UTC转换为我们当地的GMT + 1时区.这在冬天是准确的,但在夏天,由于夏令时,它是一小时.
在SQL Server中是否有内置的从UTC转换为本地时间的方法?
在SQL Server中,如果我有一个int变量,如何编写一个通过int变量的值返回值1的查询?
所以给出:
declare @cnt int
set @cnt = 5
Run Code Online (Sandbox Code Playgroud)
什么查询将返回1 - 5?这可能吗?
我想在MS SQL中实现一个在Oracles PL/SQL中看起来像这样的构造:
declare
asdf number;
begin
for r in (select * from xyz) loop
insert into abc (column1, column2, column3)
values (r.asdf, r.vcxvc, r.dffgdfg) returning id into asdf;
update xyz set column10 = asdf where ID = r.ID;
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
任何想法如何实现这将是有帮助的.
提前致谢
我有一个机密网站...我正在尝试制作一个SQL查询,用于计算用户在过去7天内发布的广告数量,但我有一个问题...
我试图在用户个人资料中显示例如:[用户名]在过去7天内发布了30个广告
这是我的SQL查询 - >
SELECT COUNT(*)
FROM table_name
WHERE user_id = '[user_id]' AND created_date > NOW() - INTERVAL 7 DAY
Run Code Online (Sandbox Code Playgroud)
所以在我的情况下,"table_name"包含来自所有用户的所有广告,并且" user_id='[user_id]'"我向用户显示他的广告数量,向用户B显示他的广告数量等...
所以这个查询工作,它从"[用户名]正确计算广告的数量,但是,例如,如果用户在网站的进入和删除的1,2或任何他的广告的号码,这个号码会被"minused"已发布30过去7天内的广告"
有人可以帮助我,我可以添加什么来查询,以便计数仍然显示正确的广告数量(在我的情况下是20个广告),即使广告被删除..
谢谢干杯
我有这个查询完美的工作:
SELECT *
FROM Customer
WHERE SacCode IN
(
SELECT SacCode
FROM SacCode
WHERE ResellerCorporateID = 392
ORDER BY SacCode
)
AND CustomerID IN
(
SELECT CxID
FROM CustAppointments
WHERE AppRoomID IN
(
SELECT AppRoomID
FROM ClinicRooms
WHERE ClinID IN
(
SELECT ClinID
FROM AppClinics
WHERE ClinDate >='20090101'
AND ClinDate <='20091119'
)
)
)
Run Code Online (Sandbox Code Playgroud)
但是,我需要看到ClinDate的值(在最后一个嵌套查询中),所以我被告知我需要使用JOINS重新编写查询.
我不知道怎么样,有人可以帮忙吗?
谢谢.
该函数mktime采用struct tmas参数.其中一个成员struct tm是tm_isdst.您可以将此设置为1表示冬季,0表示夏令时,如果您不知道,则设置为-1.
但是,如果在冬天,你尝试转换2009-09-01 00:00,mktime虽然目前是冬天,但是没有看到,你转换的日期是夏季.结果就是一个小时的休息时间.对我来说(GMT + 1)2009-08-31 22:00它应该是23:00.
有没有办法确定某个特定日期是在夏季还是冬季?是否有可能在冬季将夏季日期转换为utc?
(我试图回答这个问题时遇到了这个问题)
SET @Password = (
SELECT UserPassword,IsLocked
FROM [Authentication].[tblLogin]
WHERE UserName=@UserName)
Run Code Online (Sandbox Code Playgroud)
我试图获得两个值userpassword和islocked两个变量,以便在下一个查询中的同一个SP中使用.是否有可能或者我必须为此编写两个查询.在sql server中是否存在数组的概念
我试图在两个日期之间获取记录,但是当我运行SQL时,我收到以下错误:
操作数类型冲突:datetime2与int不兼容
SELECT M.Id, M.MTimeInt, M.Date, CAST(D.Name AS TEXT) as Name
FROM C
JOIN N ON C.N_Id=N.Id
JOIN M ON M.N_Id=N.Id
JOIN MDish ON MDish.M_Id=M.Id
JOIN D ON D.Id=MDish.D_Id
WHERE C.Id=110 AND M.Date BETWEEN 2012-05-28 AND 2012-06-08
Run Code Online (Sandbox Code Playgroud)
SQL看起来是正确的,但我似乎无法弄清楚它为什么抱怨,任何想法?
谢谢
我目前正在制作一个包含演出议程的艺术家网站.我希望它能够在开始时列出第一个即将到来的演出(asc),并在即将到来的演出之后列出过去的演出.我目前的解决方案是两个不同的查询,一个调用即将发生的事件和一个过去的事件,但我认为找出合并它们的方法更为简洁.有人知道这是否可行,怎么样?
这就是我的开始;
SELECT *
FROM agenda
INNER JOIN organizer ON agenda.agenda_organizer=organizer.organizer_id
Run Code Online (Sandbox Code Playgroud) sql ×8
sql-server ×6
mysql ×3
database ×2
join ×2
time ×2
c ×1
codeigniter ×1
dst ×1
for-loop ×1
optimization ×1
php ×1
subquery ×1
t-sql ×1
utc ×1