使用SQL根据给定规则生成SessionID

使用SQL根据给定规则生成SessionID,sql,sql-server,Sql,Sql Server,我正在为面试准备解决SQL问题。请有人能帮助我了解解决这个问题的方法 Question: Generate sessionID based on userid and logintime values. Input: (userid integer,logintime datetime) Output: userid, logintime, sessionID Rules: 1. New user will get next sessionID 2. When a user logins a

我正在为面试准备解决SQL问题。请有人能帮助我了解解决这个问题的方法

Question: 
Generate sessionID based on userid and logintime values.
Input: (userid integer,logintime datetime)
Output: userid, logintime, sessionID

Rules:
1. New user will get next sessionID
2. When a user logins after 30 mins of its previous login time, you should 
   give next sessionID.

Input:
1 9:00 AM
2 9:10 AM
1 9:25 AM
3 12:34 PM
1 3:10 PM

Output:
1 9:00 AM 1
2 9:10 AM 2
1 9:25 AM 1 -- Since User 1 logged in within 30 mins we assigned same sessionID
3 12:34 PM 3
1 3:10 PM 4 -- Again, now user logged in after 30 mins we assigned next sessionid after 3, which is 4

我不会写下答案,那可能是作弊

如果可能的话,一定要和面试官说清楚,他们是这里的最高权威

对我来说,这看起来像一个经典的插入或更新问题,查询实际的用户会话,看看它是否空闲超过30分钟,然后按要求继续

你将如何实现它,获得下一个id,取决于你。您可以使用序列或自动标识,并且必须了解这两种解决方案的区别、缺点和优点

更新

因为OP澄清了这不是一个实际的面试问题,只是一个准备问题,我可以更进一步

我可以创建一个
SP_SaveSession
存储过程,并在其中放入一个合并或旧的“IF”。查询可以在过去30分钟内搜索任何会话,如果找到一个更新它(时间戳),如果不插入一个新会话,则可以在其中查找用户ID


最后,存储过程可以重复第一次查询,在过去30分钟内获取该用户标识的任何会话。按照逻辑,这个查询只能返回一行。

我不会写下答案,这可能是作弊

如果可能的话,一定要和面试官说清楚,他们是这里的最高权威

对我来说,这看起来像一个经典的插入或更新问题,查询实际的用户会话,看看它是否空闲超过30分钟,然后按要求继续

你将如何实现它,获得下一个id,取决于你。您可以使用序列或自动标识,并且必须了解这两种解决方案的区别、缺点和优点

更新

因为OP澄清了这不是一个实际的面试问题,只是一个准备问题,我可以更进一步

我可以创建一个
SP_SaveSession
存储过程,并在其中放入一个合并或旧的“IF”。查询可以在过去30分钟内搜索任何会话,如果找到一个更新它(时间戳),如果不插入一个新会话,则可以在其中查找用户ID


最后,存储过程可以重复第一次查询,在过去30分钟内获取该用户标识的任何会话。按照逻辑,此查询只能返回一行。

如果您有面试问题,应该是您试图回答,而不是我们;我们不是面试的人。如果您想展示您的尝试,并解释它们为什么不起作用,我们可以为您指出正确的方向,但堆栈溢出不是要求我们为您完成工作的地方;这取决于你,而不是其他人。@Larnu:这不是我收到的面试问题。我也不是在试图欺骗。我正在准备面试,我偶然发现了这个问题,并试图解决它,但无法解决它。所以告诉我们你已经尝试了什么。你做过哪些研究?你不了解什么?不确定你在哪里发现了这个实践问题,但它有着可悲的缺陷。没有足够的信息来回答这个问题。坦白说,这个设计真的很糟糕。这个问题在你和我的面试中的结果听起来好像会很不一样。我会指出这种设计模式的谬误,并提出更好的选择,而不是提供“答案”。面试中几乎所有的技术性问题都是如此。实际上,我喜欢在sql访谈中以“告诉我至少一种使用t-sql获取当前系统时间的方法”开始技术讨论。我不是在开玩笑,50%以上的面试都以这个问题结束。声称拥有5年以上t-sql经验但却无法回答对每个行业的查询都至关重要的问题的人真是令人震惊;我们不是面试的人。如果您想展示您的尝试,并解释它们为什么不起作用,我们可以为您指出正确的方向,但堆栈溢出不是要求我们为您完成工作的地方;这取决于你,而不是其他人。@Larnu:这不是我收到的面试问题。我也不是在试图欺骗。我正在准备面试,我偶然发现了这个问题,并试图解决它,但无法解决它。所以告诉我们你已经尝试了什么。你做过哪些研究?你不了解什么?不确定你在哪里发现了这个实践问题,但它有着可悲的缺陷。没有足够的信息来回答这个问题。坦白说,这个设计真的很糟糕。这个问题在你和我的面试中的结果听起来好像会很不一样。我会指出这种设计模式的谬误,并提出更好的选择,而不是提供“答案”。面试中几乎所有的技术性问题都是如此。实际上,我喜欢在sql访谈中以“告诉我至少一种使用t-sql获取当前系统时间的方法”开始技术讨论。我不是在开玩笑,50%以上的面试都以这个问题结束。声称拥有5年以上的t-sql经验,却无法回答对每个行业的查询都至关重要的问题的人真是令人震惊。这个问题不是从采访中提出来的。我在“练习”问题时遇到这个问题,并试图解决它,但无法解决。这个问题不是从采访中提出来的。我在“练习”问题时遇到这个问题,并试图解决它,但无法解决。