Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL编程_Sql_Tsql_Sql Server 2008 R2 - Fatal编程技术网

T-SQL编程

T-SQL编程,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,我需要写一个查询来提取记录,如下所示 membership_id, person_id, first_name last_name 昨天加入或致电的成员和未加入的成员将只有个人id 但是下面的查询正在从表中取出所有记录 SELECT dbo.pn_membership.membership_id, dbo.pn.person_id, dbo.pn.first_name, dbo.pn.surname, dbo.pn.create_datetime FROM

我需要写一个查询来提取记录,如下所示

membership_id,
person_id,
first_name
last_name 
昨天加入或致电的成员和未加入的成员将只有个人id

但是下面的查询正在从表中取出所有记录

SELECT 
  dbo.pn_membership.membership_id, 
  dbo.pn.person_id,
  dbo.pn.first_name, 
  dbo.pn.surname, 
  dbo.pn.create_datetime 
 FROM 
  dbo.pn
  LEFT OUTER JOIN
  dbo.pn_membership 
  ON dbo.pn.person_id=dbo.pn_membership.person_id AND
  dbo.pn.create_datetime >=getdate()-1
我只需要运行日期前一天的记录。

尝试以下操作:

SELECT 
  dbo.pn_membership.membership_id, 
  dbo.pn.person_id,
  dbo.pn.first_name, 
  dbo.pn.surname, 
  dbo.pn.create_datetime 
 FROM 
  dbo.pn
  LEFT OUTER JOIN
  dbo.pn_membership 
  ON dbo.pn.person_id=dbo.pn_membership.person_id 
WHERE dbo.pn.create_datetime >=getdate()-1
你的问题是

  • 从pn表中给我一些字段
  • 另外,如果此人有匹配的会员记录,请告诉我 信息
  • 如果他们没有给我成员资格表中的字段空值 价值观

通过将日期测试条件移动到WHERE子句,可以减少pn表中的行。通过将日期作为联接的一部分应用,您只会增加从成员资格表中获取更多空值列的可能性。

您是说它提取日期为
SELECT dbo.pn_membership.membership_id, dbo.pn.person_id, dbo.pn.first_name, 
dbo.pn.surname, dbo.pn.create_datetime FROM dbo.pn LEFT OUTER JOIN dbo.pn_membership ON 
dbo.pn.person_id=dbo.pn_membership.person_id AND dbo.pn.create_datetime >=getdate()-1 
and dbo.pn.person_id is not NULL
试试这个版本

你在问题“昨天谁加入或打电话来了”中写道
但您的查询不会显示“过去24小时内有谁加入或致电”
这有点不同。另外,正如Sparky所指出的,您有这种缺陷
WHERE子句的问题。我的版本是“谁昨天加入或打过电话”。

选择
dbo.pn_membership.membership_id,
dbo.pn.person_id,
dbo.pn.first_name,
dbo.pn.姓,
dbo.pn.create_datetime
从…起
dbo.pn
左外连接
dbo.pn_成员资格
关于dbo.pn.person\u id=dbo.pn\u membership.person\u id
哪里
dbo.pn.create_datetime>=DATEADD(Day,DATEDIFF(Day,0,getdate()),-1)
和
dbo.pn.create_datetime
问题似乎就在查询的最后。不要使用
和dbo.pn.create_datetime>=getdate()-1
,而是尝试使用
其中dbo.pn.create_datetime>=getdate()-1
。将筛选条件作为
OUTER JOIN
语句的一部分包含与使用
WHERE
子句不同。另请参见。

我认为他的问题在于日期逻辑位于左侧JOIN语句,而不是WHERE语句clause@Sparky正确,谢谢。我总是忘记这一点。
SELECT 
dbo.pn_membership.membership_id, 
dbo.pn.person_id,
dbo.pn.first_name, 
dbo.pn.surname, 
dbo.pn.create_datetime 
FROM 
dbo.pn
LEFT OUTER JOIN
dbo.pn_membership 
ON dbo.pn.person_id=dbo.pn_membership.person_id
WHERE
dbo.pn.create_datetime >= DATEADD(Day, DATEDIFF(Day, 0, getdate()), -1)
AND 
dbo.pn.create_datetime < DATEADD(Day, DATEDIFF(Day, 0, getdate()), 0)