1. 程式人生 > >資料庫--SQLServer--如何找到包含某列最大值的那一行

資料庫--SQLServer--如何找到包含某列最大值的那一行

本題可以有多種方式實現。
1.使用分析函式max,找出每個user_id分組的max(my_date)。
1 2 3 4 5 6 7 8 9 10 11 12 select  user_id, my_value, my_date from ( select  user_id, my_value, my_date, max(my_date) over (partition by user_id) max_my_date from mytable ) where my_date = max_my_date

2.使用分析函式row_number,根據user_id分組後按照my_date排序,取每組第一個。

1 2 3 4 5 6 7 8 9 10 11 12 select  user_id, my_value, my_date from ( select  user_id, my_value, my_date, row_number() over (partition by user_id order by my_date desc) num from mytable ) where num = 1

3.使用group by和子查詢

1 2 3 4 5 6 7 8 9 10 11 12 select A.user_id, A.my_value, A.my_date from mytable A, ( select  user_id, max(my_date) as max_my_date from mytable group by user_id ) B where A.user_id = B.user_id and A.my_date = B.max_my_date

4.自關聯加左關聯

1 2 3 4 5 6 SELECT t1.* FROM mytable t1 LEFT OUTER
JOIN mytable t2 ON t1.User_Id = t2.User_Id AND t1.my_date < t2.my_date WHERE t2.User_Id IS NULL;

這個方法很別緻,深入理解其含義對理解關聯操作很有幫助。它的where條件是找出沒有滿足做關聯條件的記錄。而左關聯的條件是自關聯找出自身user_id下日期大於自己的記錄。不滿足此條件則表明該記錄沒有日期大於自己的記錄,那就是最大日期了。

其實類似的方法還有很多,以上列出具有代表性的方式而已,供學習參考。

文章來自:http://www.sqlparty.com/%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E5%8C%85%E5%90%AB%E6%9F%90%E5%88%97%E6%9C%80%E5%A4%A7%E5%80%BC%E7%9A%84%E9%82%A3%E4%B8%80%E8%A1%8C%EF%BC%9F/

相關推薦

資料庫--SQLServer--如何找到包含一行

本題可以有多種方式實現。 1.使用分析函式max,找出每個user_id分組的max(my_date)。 1 2 3 4 5 6 7 8 9 10 11 12 select  user_id, my_value, my_date from ( select 

資料對應的一條資料

最近設計一個事務處理,遇到一個Sql語句怎麼都寫不出啦,試了很多次才實現,因此在此記錄分享一下。 業務是這樣的:求書的表中的價格最高的那本書的詳細資訊; 表books中有三個欄位,isbn,boo

linq 多分組取

     string[] Names = new string[] { "張三1", "張三2", "張三3", "張三4", };             List<User> Users = new List<User>();        

20.出N*N矩陣中並輸出

給定程式中,函式fun的功能是:找出N*N矩陣中每列元素中的最大值,並按照順序依次存放於形參b所指的一維陣列中。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define N 4 void fun(i

(java)leetcode852 山脈陣列的封頂索引(二分查詢法出陣列中的下標)(Peak Index in a Mountain Array)

題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A

用 prompt 輸入字串,建立陣列,出陣列中,問題闡述與解決。

用 prompt 輸入字串建立陣列。用三種方法找出陣列中最大值。問題闡述與解決。 實現目標:輸入一組數,並找出這組數中最大的值。 採用的方法: 雙 for迴圈,列出從小到大(從大到小)順序。 單 for 迴圈,一遍迴圈找出最大值。 使用 Math.max。

6-2 出矩陣中所在的位置

將1個3*2的矩陣存入1個3*2的二維陣列中,找出最大值以及它的行下標和列下標,並輸出該矩陣 #include<stdio.h> int main(void) {int col, i, j, row;int a[3][2];//將輸入的數存入二維陣列 for(i = 0

python利用pandas出矩陣的及其對應的位置

import pandas as pd text = pd.DataFrame([[21,45,78],[23,56,89],[14,25,36],[47,58,69]]) # 先建立一個矩陣 print(text) Out[1]: 0 1 2 0 21 45 78 1

同時出陣列的,要求時間複雜度為o(n)

#include <stdio.h> void max_min(int A[],int n,int& max,int& min) { int i; if(n%2==0) { if(

求陣列每

#實現程式碼 var arr=[ [1,2,5,9], [4,6,2,8], [2,5,7,4], [3,7,8,1], [0,4,1,2] ]; //建立一個空陣列,用來接收每一列最大數所在的行數 var hang=[]

Python獲取二維矩陣每

    因為做專案中間有一個很小的環節需要這個功能,所以就寫了一個簡單的小函式,下面是具體實現: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 ''' def get_max_value(mart

hdu4006 第k個 優先佇列

題意 不斷地向數組裡面加數,然後有多次詢問,每次詢問要求輸出該陣列中第k大的數 陣列長度和詢問次數不超過1e6 思路 此題貌似有多種做法,用樹狀陣列和線段樹也能做. 用優先佇列來做的話,就是維護有k個數的最小堆,每次詢問是將堆頂的數輸出即可 #include<

Oracle中取多個欄位多個的方法

已知表TB的資料如下 SQL> select * from tb;        ID CHINESE    MATH ENGLISH ---------- ---------- ---------- ----------    1001       89       98       87    1

【Hive】多 或 陣列

 max()函式是針對單列多行求最大值。當我們想要對多列同行之間進行比較時,可以嘗試以下辦法: 1.先將數值轉換成陣列array(),再對陣列排序sort_array(),通過負值使其為降序; select -sort_array(array(-a,-b,-c))[0]

堆&&堆排序&&N個數中出K個&&優先順序佇列

學習二叉樹後,有一個東西需要我們來關注下,就是堆,對於堆,來說我們可以把堆看作一顆完全二叉樹。這裡我們也可以叫做二叉堆。 二叉堆滿足二個特性: 1.父結點的鍵值總是大於或等於(小於或等於)任何一個子節點的鍵值。 2.每個結點的左子樹和右子樹都是一個二叉堆(

PHP 如何在txt裏查包含某個字符串的一行

包含 div handler 字符串 bstr int txt sub substr <?php $handler=fopen("1.txt","r"); while(!feof($handler)) { $m = fgets($handler,409

oracle 資料庫對於多

1.案例:   SELECT GREATEST('36', '55', '34') V_MAX, LEAST('36', '55', '34') V_MIN FROM DUAL Oracle比較一列的最大值或者最小值,我們會不假思索地用MAX和MIN函式,但是對於比較一行的最大值

mybatis怎麼返回

今天在專案中遇到需要獲取到資料庫中最大的id值到前臺顯示,好久不寫程式碼的我,竟然忘記怎麼寫了,真是丟人啊。 所以呢,寫出來之後的我,要在這裡記錄一下。 Mapper檔案中sql: <selec

DataTable

1.datatable.compute("max(列名)","") 2.Column.Expression     =     "max(資料列名)";    3.用檢視來排序           Dim     firstView     As     DataVi

mybatis。插入語句如何插入資料庫一欄位(純sql實現)

<insert id="inserts"> <selectKey keyProperty="ID" ORDER="BEFORE" resultType="java.lang.I